【发布时间】:2011-11-12 16:25:56
【问题描述】:
我有一个字符串值,我正在尝试为其提取列表项。我想提取文本和任何子节点,但是,DOMDocument 正在将实体转换为字符,而不是保持原始状态。
我尝试将 DOMDocument::resolveExternals 和 DOMDocument::substituteEntities 设置为 false,但这没有任何效果。应该注意的是,我在 Win7 上运行 PHP 5.2.17。
示例代码为:
$example = '<ul><li>text</li>'.
'<li>½ of this is <strong>strong</strong></li></ul>';
echo 'To be converted:'.PHP_EOL.$example.PHP_EOL;
$doc = new DOMDocument();
$doc->resolveExternals = false;
$doc->substituteEntities = false;
$doc->loadHTML($example);
$domNodeList = $doc->getElementsByTagName('li');
$count = $domNodeList->length;
for ($idx = 0; $idx < $count; $idx++) {
$value = trim(_get_inner_html($domNodeList->item($idx)));
/* remainder of processing and storing in database */
echo 'Saved '.$value.PHP_EOL;
}
function _get_inner_html( $node ) {
$innerHTML= '';
$children = $node->childNodes;
foreach ($children as $child) {
$innerHTML .= $child->ownerDocument->saveXML( $child );
}
return $innerHTML;
}
&frac12; 最终被转换为 ½(单字符/UTF-8 版本,而不是实体版本),这不是所需的格式。
【问题讨论】:
-
您如何确定发生了转换?您是否以 HTML 格式显示结果?
-
带有回显(实际代码稍微复杂一些)。我将使用我目前正在使用的回声更新示例代码。回显结果正在输出到日志文件。结果显示在 Textpad(如记事本)中,而不是 HTML。
-
如何将
$example字符串加载到DOMDocument中? -
5.3.6 - php.net/manual/en/domdocument.savehtml.php(此支持
$doc->saveHTML( new DOMNode('&frac12;') ); -
@Phil。为了确保示例代码在发布之前确实有效,有一些话要说。但它确实有效。
标签: php dom domdocument php-5.2