使用DOMNode->属性的问题,该属性具有值中包含多个单词的属性

时间:2011-04-13 06:59:38

标签: php domdocument

现在已经在这个问题上拖了太久......

$dom = new DOMDocument();
$dom->loadHTML( $content );

$links = $dom->getElementsByTagName( 'a' )->item( 0 );
foreach ( $links->attributes as $attribute ) {
    $name = $attribute->nodeName;
    $value = str_replace( '"', '', stripslashes( $attribute->nodeValue ) );
    echo "$name: $value<br />";
}

我的代码最终来自:php dom get all attributes of a node。我还尝试过其他方法,例如为单个属性调用getAttribute()以查看是否可行,但结果相同。

我试图通过的HTML只是:

<a id="testid" title="testtitle" name="this is a testname" href="http://example.com/">link!</a>

我收到以下错误:

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: error parsing attribute name in Entity, line: 1

我的脚本正在输出:

id: testid
title: testtitle
name: this
is: 
a: 
testname: 
href: http://example.com/

我应该补充一点,如果'name'属性是一个单词,输出就可以正常工作。

很明显,它必须在空格上使用explode()或愚蠢的东西。有没有办法绕过这个没有将所有空格转换为%20或其他东西(我有很多其他内容超出链接,不想转换整个内容块)?

1 个答案:

答案 0 :(得分:4)

如评论中所述,name属性与id属性共享相同的空间,{{1}}属性定义为"NAME token",仅限于字母,数字,破折号,下划线,句号和冒号。

您会注意到该列表中不允许有空格。

PHP使用的DOMDocument解析器的某些版本对HTML合规性非常严格,并且在遇到规范违规时会抱怨并定期执行错误的事情。这可能是其中一种情况。从名称属性中删除空格,看看是否继续看到问题。