Intereting Posts
Загрузка файла автозагрузки после отправки формы установка cakephp 3 вручную, без композитора $ db = new PDO ("mysql: host = $ host; db_name = $ db_name", $ user, $ pass); yii2: Обновить значения в двух таблицах с помощью действия одного контроллера? Composer Autoload – Не удается найти класс Не удалось выполнить доставку почты: отправка сообщения отправителю Перенесите первый символ каждого слова в строку, кроме 'и', 'to' и т. Д. PHP unserialize продолжает бросать одну и ту же ошибку более 100 раз Невозможно разобрать RSS XML с PHP Сессии CodeIgniter продолжают уничтожаться mysql_insert_id (); не возвращать значение после успешной вставки строки doctrine2 загружает ассоциации «один ко многим» с режимом выборки, стремясь использовать слишком много SQL-запросов Как понимать значки браузера в помощи PHPStorm? автоматически создать кнопку покупки сейчас paypal? Как защитить трафик между iOS-приложением и сервером?

Есть ли хорошие библиотеки php, которые могут конвертировать html / php документы в объекты

Я вижу много php-библиотек, которые могут анализировать html. Хорошим примером является QueryPath, который имитирует JQuery Api.

Тем не менее, я ищу анализ phtml . Таким образом, библиотека не только хорошо анализирует DOM, но также хорошо анализирует инструкции обработки php . например, объектная модель документа Php или PDOM .

Документ, подобный этому:

 <?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?><html> <head> <title><?php echo $title ?></title> </head> <body> <h1>Hello <?php echo $name ?></h1> <p>Blah Blah Blah</p> </body> 

Я хотел бы иметь возможность использовать эту библиотеку php для чтения таких вещей, как:

  • внутренний html узла DOM, найденный с помощью переключателя xpath или css.

а также, возможно, предлагая такие вещи, как:

  • список php-функций / методов, вызываемых в скрипте
  • значения переменных php
  • страницы, требуемые этой страницей
  • список переменных php, используемых до строки 5
  • список переменных php, используемых до 1-го пара элемента body

Я мог потратить некоторое время на то, чтобы собрать что-то вместе, заимствуя код из таких вещей, как phpdocumentor и Zend Framework Reflection , используя встроенный DOM Api, интроспекцию и манипуляцию строк и т. Д.

Но если есть какая-то библиотека * phtmlQuery, которая может делать такие вещи, тогда это будет удобно.

Solutions Collecting From Web of "Есть ли хорошие библиотеки php, которые могут конвертировать html / php документы в объекты"

Чтобы получить инструкции по обработке (и другие узлы) из ваших файлов, вы можете использовать DOM и XPath :

 $dom = new DOMDocument; $dom->loadHTMLFile('/path/to/your/file/or/url'); $xpath = new DOMXPath($dom); foreach ($xpath->query('//processing-instruction()') as $pi) { echo $dom->saveHTML($pi), PHP_EOL; } 

Это приведет к выводу:

 <?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?> <?php echo $title ?> <?php echo $name ?> 

Это будет работать со сломанным HTML. Вы можете найти дополнительные библиотеки в

  • Как вы анализируете и обрабатываете HTML / XML в PHP?

Как только вы получите инструкции по обработке, вы можете запустить их через собственный токенизатор или попробовать некоторые из них:

Те не магически не дают вам информацию, которую вы ищете из коробки, поэтому вам, скорее всего, придется написать несколько дополнительных строк по своему усмотрению.

есть синтаксический анализатор xml, включенный в ядро ​​php, который мог бы это сделать, но вы могли бы использовать его только на действительных страницах xhtml, а не только обычном html или сломанном xhtml. вам придется настроить парсер для обработки инструкций по обработке, и это может стать очень сложным.

http://www.php.net/manual/en/book.xml.php

http://www.php.net/manual/en/function.xml-set-processing-instruction-handler.php

Вы можете использовать token_get_all PHP для tokenize PHP, чтобы затем вы могли выполнить результат и проверить вызовы функций и значения PHP.

Например:

 <?php $src = <<<EOD <?php require 'NameFinder.php'; $title = 'Wave Hello'; $name = getName(); ?><html> <head> <title><?php echo $title ?></title> </head> <body> <h1>Hello <?php echo $name ?></h1> <p>Blah Blah Blah</p> </body> EOD; $tokens = token_get_all($src); var_dump($tokens); 

Вам все равно нужно написать немного кода, чтобы пройти по всем токенам, посмотреть, что они собой представляют, а затем получить значение на основе типа токена (имя функции, строковая буква, назначение переменной и т. Д.), Но это делает много работы для вы до разбора PHP.