php DOMDocument () -> getAttribute () не работает - PullRequest
0 голосов
/ 26 мая 2020

Я хочу получить значение атрибута href тега a из HTML внутри строки.

Я сделал PHP скрипку здесь , потому что string слишком длинный.

Ошибка:

PHP Parse error:  syntax error, unexpected 'undefined' (T_STRING) in...

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Для длинных многострочных строк я предпочитаю переключаться на синтаксис heredo c, который обеспечивает более чистый / наглядный способ обработки строк и кавычек внутри него. Он также предлагает строку « WYSIWYG display», так как вставлять разрывы строк, табуляции, пробелы, кавычки и двойные кавычки безопасно.

Я переключил ваш пример на HEREDO C, и он отлично работает (с правильным результатом), за исключением нескольких предупреждений из-за неправильного ввода HTML.

<?php

$string = <<<HTMLINPUT
Your multi-line HTML input goes here.
HTMLINPUT;

$doc = new DOMDocument();
$doc->loadHTML($string);
$selector = new DOMXPath($doc);
$result = $selector->query('//a[@title="Document Details"]');
echo $url = $result[0]->getAttribute('href');

Полный пример в отдельной скрипке .

Надеюсь, это поможет.

0 голосов
/ 26 мая 2020

В php песочнице ваш код работает.

Однако вы забыли < в начале тега a.

<?php
$string = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            <head>
            </head>
            <body onclick="on_body_click()" text="#000000" alink="#FF0000" link="#0000FF" vlink="#800080"> 
             <a href="/cgi-bin/new_get_recorded.cgi?l_doc_ref_no=7506389&amp;COUNTY=san francisco&amp;YEARSEGMENT=current&amp;SEARCH_TYPE=DETAIL_N" title="Document Details">Show Name Detail</a> 
                </body>
    </html>';

$doc = new DOMDocument();
$doc->loadHTML($string);
$selector = new DOMXPath($doc);
$result = $selector->query('//a[@title="Document Details"]');
$url = $result[0]->getAttribute('href');
echo $url;

В $url у вас есть href значение (распечатано).

Похоже, у вас проблема со строкой и использованием ' и ".

Если вы запустите $string с ', вы не сможете использовать его внутри. Вы можете использовать ' только в конце, чтобы закрыть php переменную ';;

У вас есть три решения:

  1. заменить ' на " внутри строка, представляющая ваш html;
  2. Используйте \' вместо только ' внутри строки, представляющей ваш html. Это сообщает php, что строка еще не закончена, но что ' представляет содержимое строки;
  3. heredo c синтаксис;

Например, с первым подходом имеем:

$string = ' Inside the string you should use just this type of apostrophe " ';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...