现在已经在这个问题上拖了太久......
$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或其他东西(我有很多其他内容超出链接,不想转换整个内容块)?
答案 0 :(得分:4)
如评论中所述,name
属性与id
属性共享相同的空间,{{1}}属性定义为"NAME token",仅限于字母,数字,破折号,下划线,句号和冒号。
您会注意到该列表中不允许有空格。
PHP使用的DOMDocument解析器的某些版本对HTML合规性非常严格,并且在遇到规范违规时会抱怨并定期执行错误的事情。这可能是其中一种情况。从名称属性中删除空格,看看是否继续看到问题。