【问题标题】:php DOMDocument()->getAttribute() not workingphp DOMDocument()->getAttribute() 不工作
【发布时间】:2020-05-26 22:05:11
【问题描述】:

我想从字符串中的 HTML 中获取 a 标签的 href 属性的值。

我做了一个 PHP 小提琴 here,因为 string 太长了。

错误:

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

【问题讨论】:

  • 它似乎确实有效。当我在the php sandbox 中运行您的代码时,我在$url 中得到了href
  • 我收到的第一条消息是<b>Warning</b>: DOMDocument::loadHTML(): Unexpected end tag : a in Entity。您的 <a> 标签缺少起始 <
  • 那个字符串不正确,实际的很长。你能看看这个吗?ideone.com/hGsrDZ我遇到了一个错误。
  • 你应该使用heredoc或者nowdoc来定义你的字符串
  • 您应该将相关代码放在问题本身中。此外,链接代码触发PHP Parse error: syntax error, unexpected 'undefined' (T_STRING) :-?

标签: php html dom domdocument


【解决方案1】:

在 php Sandbox 中,您的代码可以工作。

但是,您忘记了< 开头的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. heredoc 语法;

以我们的第一种方法为例:

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

【讨论】:

  • 那个字符串不正确,实际的很长。你能看看这个吗?ideone.com/hGsrDZ我遇到了一个错误。
  • 字符串有问题。你滥用'"
【解决方案2】:

对于长的多行字符串,我更喜欢切换到heredoc 语法,它提供了一种更简洁/可见的方式来处理其中的字符串和引号。它还提供字符串的“WYSIWYG 显示”,因为可以安全地插入换行符、制表符、空格、引号和双引号。

我将您的示例切换为 HEREDOC 语法,它运行良好(结果正确),除了由于您的 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');

separate fiddle 中的完整示例。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2013-06-16
    • 2011-02-20
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多