Intereting Posts
получить записи для последней timestamp mysql Как определить, удалить и перенаправить URL-адреса с # в конце в PHP? Как запустить скрипт PHP асинхронно? Проблемы с PHP с использованием блокировки файловых файлов Почему этот подготовленный MySQLI оператор разрешает SQL-инъекцию? Приоритет операторов «или» и присвоение Как я могу защитить этот код от SQL Injection? Немного смущен Электронная почта для запуска PHP Script … Возможно? Как сделать отрицательную проверку формы в кодеригере? Обновление php не обновляет базу данных Загружать данные по умолчанию по умолчанию, не вставляя в таблицу PHP-массив копирует определенные ключи, встроенные функции? Производительность вложенного контура? Как прочитать строку запроса в PHP и HTML? хранить множественные значения в сеансе php facebook graph api возвращает только имя и идентификатор для некоторых веб-сайтов

Использование PHP для получения элемента DOM

Я изо всех сил пытаюсь понять, как использовать объект DOMElement в PHP. Я нашел этот код, но я не уверен, что он применим ко мне:

$dom = new DOMDocument(); $dom->loadHTML("index.php"); $div = $dom->getElementsByTagName('div'); foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; } 

В основном мне нужно искать DOM для element с определенным id , после чего мне нужно извлечь нестандартный attribute (то есть тот, который я составил и надел с JS), поэтому я могу видеть значение этого , Причина в том, что мне нужна одна часть из $_GET и одна часть, которая находится в HTML, основанная на переадресации. Если бы кто-то мог просто объяснить, как я использую DOMDocument для этой цели, это было бы полезно. Я действительно борюсь за понимание того, что происходит и как правильно его реализовать, потому что я явно не делаю это правильно.

EDIT (Где я нахожусь на основе комментария):

Это мои коды кода 4-26 для справки:

 <div id="column_profile"> <?php require_once($_SERVER["DOCUMENT_ROOT"] . "/peripheral/profile.php"); $searchResults = isset($_GET["s"]) ? performSearch($_GET["s"]) : ""; $dom = new DOMDocument(); $dom->load("index.php"); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; } } $div = $dom->getElementById('currentLocation'); $attr = $div->getAttribute('srckey'); echo "<h1>{$attr}</a>"; ?> </div> <div id="column_main"> 

Вот сообщение об ошибке, которое я получаю:

 Warning: DOMDocument::load() [domdocument.load]: Extra content at the end of the document in ../public_html/index.php, line: 26 in ../public_html/index.php on line 10 Fatal error: Call to a member function getAttribute() on a non-object in ../public_html/index.php on line 21 

getElementsByTagName возвращает вам список элементов, поэтому сначала вам нужно выполнить цикл через элементы, а затем через их атрибуты.

 $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; echo "Attribute '$name' :: '$value'<br />"; } } 

В вашем случае вы сказали, что вам нужен конкретный идентификатор. Предполагается, что они уникальны, поэтому для этого вы можете использовать (note, getElementById может не работать, если вы сначала не $dom->validate() ):

 $div = $dom->getElementById('divID'); 

Затем, чтобы получить свой атрибут:

 $attr = $div->getAttribute('customAttr'); 

EDIT : $dom->loadHTML просто считывает содержимое файла, он не выполняет их. index.php не будет работать таким образом. Возможно, вам придется сделать что-то вроде:

 $dom->loadHTML(file_get_contents('http://localhost/index.php')) 

У вас не будет доступа к HTML, если перенаправление осуществляется с внешнего сервера. Позвольте мне сказать так: DOM не существует в момент, когда вы пытаетесь его разобрать. Что вы можете сделать, так это передать текст в парсер DOM, а затем манипулировать элементами таким образом. Или лучшим способом было бы добавить его в качестве другой переменной GET.

EDIT: Вы также знаете, что клиент может изменить HTML и передать все, что захочет? (Использование инструмента, такого как Firebug)