小编Col*_*man的帖子

如何防止 DOMDocument 转换 转为统一码

我正在尝试获取DOMElementPHP 中 a 的内部 HTML。标记示例:

<div>...</div>
<div id="target"><p>Here's some &nbsp; <em>funny</em> &nbsp; text</p></div>
<div>...</div>
<div>...</div>
Run Code Online (Sandbox Code Playgroud)

将上面的字符串输入变量中$html,我正在做:

$doc = new DOMDocument();
@$doc->loadHTML("<html><body>$html</body></html>");
$node = $doc->getElementById('target')
$markup = '';
foreach ($node->childNodes as $child) {
  $markup .= $child->ownerDocument->saveXML($child);
}
Run Code Online (Sandbox Code Playgroud)

生成的$markup字符串如下所示(转换为 JSON 以显示不可见字符):

"<p>Here's some \u00a0 <em>funny<\/em> \u00a0 text<\/p>"
Run Code Online (Sandbox Code Playgroud)

所有&nbsp;字符都已转换为 Unicode 不间断空格,这会破坏我的应用程序。

在我的理想世界中,有一种方法可以按原样检索目标 div 内的原始 HTML 字符串,而无需DomDocument对其执行任何操作。这似乎不可能,所以下一个最好的办法是以某种方式关闭此字符转换。到目前为止我已经尝试过:

  • 设置$doc->substituteEntities = false;没有结果。更改为true也没有帮助。
  • 切换$doc->preserveWhiteSpace方式均无变化
  • 更改saveXMLsaveHTML. …

php domdocument

3
推荐指数
1
解决办法
1226
查看次数

标签 统计

domdocument ×1

php ×1