Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вытащить информацию из .js файла и поместить в переменную
Форумы портала PHP.SU » » Вопросы новичков » Вытащить информацию из .js файла и поместить в переменную

Страниц (1): [1]
 

1. alerzo - 19 Октября, 2015 - 10:39:32 - перейти к сообщению
Здравствуйте! Есть задача в том чтобы вытащить информацию из .js файла и поместить ее в переменую. Вытащить нужно строки, обрамленные кодом..
Содержимое файла .js:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. var url_vhoda = [
  4. 'http://2-ip.ru',
  5. 'http://2-ip.ru',
  6. 'http://2-ip.ru',
  7. 'https://yandex.ru',
  8. 'https://google.ru',
  9. ];
  10.  
  11.  

Нужно вытащить строки:
http://2-ip[dot]ru
http://2-ip[dot]ru
http://2-ip[dot]ru
https://yandex[dot]ru
https://google[dot]ru

С последующим выводом их в textarea, подскажите как реализовать! Понял что нужно сначало положить все данные в переменную а потом парсить регулярным выражением, но как это сделать?
PHP:
скопировать код в буфер обмена
  1.  
  2. $dir = "../ID-S/ID/$id.js";
  3. if (file_exists($dir)) {
  4.     echo "Файл настройки $id найден!<br/> ";
  5.     $filename=file_get_contents($dir);
  6.     echo $filename;
  7. //по идее здесь должен быть сам парсинг файла
  8.  
2. Faraon-san - 19 Октября, 2015 - 10:56:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $dir = "../ID-S/ID/$id.js";
  3. if (file_exists($dir)) {
  4.     echo "Файл настройки $id найден!<br/> ";
  5.     $filename=file_get_contents($dir);
  6.     preg_match_all('/\'([^\']+)\'/', $filename, $matches);
  7.     var_dump($matches[1]);
  8. }
  9.  
3. alerzo - 19 Октября, 2015 - 11:32:46 - перейти к сообщению
[quote=Faraon-san][/quote]
Не подходит регулярное выражение..файл длинный..спарсилось все подряд..нужно ограничиться тем что находится между var url_vhoda = [ и ];
нужные значения находятся в ковычках
4. Мелкий - 19 Октября, 2015 - 11:55:36 - перейти к сообщению
А более в общем какая задача?
Нельзя выкинуть разбор кода JS и оставить чистый JSON?

Если этот js хотите редактировать откуда-то с веб-морды, то разберите его на удобные части и при сохранении просто генерируйте новый файлик целиком.
5. alerzo - 19 Октября, 2015 - 12:00:10 - перейти к сообщению
В общем - в файле сотни параметров, это уже и есть удобный формат для парсинга..плохо знаком с регулярными выражениями, нужен пример..всего - 3-4 вида разных вариантов данных которые нужно спарсить.
6. DeepVarvar - 19 Октября, 2015 - 12:17:16 - перейти к сообщению
А вот ты как думаешь, js-движок регулярками код парсит?
7. Мелкий - 19 Октября, 2015 - 12:17:29 - перейти к сообщению
Раз нужны регулярки - это всегда отвратный формат для парсинга.
Удобный - это файл целиком в JSON. Или ini, или yaml какой, да хоть, прости ктулху, xml. В общем, что угодно, для чего есть нормальный читатель.

Вот вам пример: http://perlmonks[dot]org/?node_id=995856 вот эта здоровая перловая регулярка на 3 экрана и то не умеет юникод. А сам json вычитывать придётся, иначе вы не сможете нормально найти конец объявления этой вашей var url_vhoda.
8. Panoptik - 19 Октября, 2015 - 12:22:20 - перейти к сообщению
а что если загрузить этот файл в какой-нибудь джс движок типа фантомджс или в ноду и оттуда прямо отдать значения нужных переменных
9. alerzo - 19 Октября, 2015 - 12:31:30 - перейти к сообщению
задача конкретная, а не свободная..
1) есть файл с содержимым
2) нужен код на php который его выдернет..
начинается нужный код всегда с "var url_vhoda = ["
заканчивается "];"
нужные значения находятся в ковычках через запятую...
Все..
10. Panoptik - 19 Октября, 2015 - 14:11:45 - перейти к сообщению
для пхп >= 5.4

PHP:
скопировать код в буфер обмена
  1. $varDefinition = 'var url_vhoda =';
  2. $posStart = strpos($jsContent, $varDefinition, null) + strlen($varDefinition);
  3. $posEnd = strpos($jsContent, ']', $posStart);
  4. $results = eval('return ' . mb_substr($jsContent, $posStart, $posEnd - $posStart +1, 'UTF-8') . ';');
  5. var_dump($results);
11. DelphinPRO - 19 Октября, 2015 - 17:34:24 - перейти к сообщению
Panoptik

для пхп >= 5.3

PHP:
скопировать код в буфер обмена
  1. $varDefinition = 'var url_vhoda =';
  2. $posStart = strpos($jsContent, $varDefinition, null) + strlen($varDefinition);
  3. $posEnd = strpos($jsContent, ']', $posStart);
  4. $results = json_decode(mb_substr($jsContent, $posStart, $posEnd - $posStart +1, 'UTF-8'), true);
  5. var_dump($results);


Улыбка Почему эвал-то сразу?

 

Powered by ExBB FM 1.0 RC1