相关疑难解决方法(0)

PHP DOMDocument loadHTML没有正确编码UTF-8

我正在尝试使用DOMDocument解析一些HTML,但是当我这样做时,我突然失去了编码(至少这对我来说是这样).

$profile = "<div><p>various japanese characters</p></div>";
$dom = new DOMDocument();
$dom->loadHTML($profile); 

$divs = $dom->getElementsByTagName('div');

foreach ($divs as $div) {
    echo $dom->saveHTML($div);
}
Run Code Online (Sandbox Code Playgroud)

这段代码的结果是我得到了一堆不是日语的字符.但是,如果我这样做:

echo $profile;
Run Code Online (Sandbox Code Playgroud)

它显示正确.我尝试过saveHTML和saveXML,但都没有正确显示.我使用的是PHP 5.3.

我所看到的:

ã¤ãªãã¤å·ã·ã«ã´ã«ã¦ãã¢ã¤ã«ã©ã³ãç³»ã®å®¶åº­ã«ã9人åå¼ã®5çªç®ã¨ãã¦çã¾ãããå½¼ãå«ãã¦4人ã俳åªã«ãªã£ããç¶è¦ªã¯æ¨æã®ã»ã¼ã«ã¹ãã³ã§ãæ¯è¦ªã¯éµä¾¿å±ã®å®¢å®¤ä¿ã ã£ãã髿 ¡æä»£ã¯ã­ã£ãã£ã®ã¢ã«ãã¤ãã«å¤ãã¿ãæè²è³éãåããªããã«ããªãã¯ç³»ã®é«æ ¡ã¸é²å­¦ã
Run Code Online (Sandbox Code Playgroud)

应该展示什么:

???????????????????????9????5???????????????4???????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

编辑:我已将代码简化为五行,以便您自己测试.

$profile = "<div lang=ja><p>???????????????????????</p></div>";
$dom = new DOMDocument();
$dom->loadHTML($profile);
echo $dom->saveHTML();
echo $profile;
Run Code Online (Sandbox Code Playgroud)

这是返回的html:

<div lang="ja"><p>イリノイ州シカゴã«ã¦ã€ã‚¢ã‚¤ãƒ«ãƒ©ãƒ³ãƒ‰ç³»ã®å®¶åº­ã«ã€</p></div>
<div lang="ja"><p>???????????????????????</p></div>
Run Code Online (Sandbox Code Playgroud)

php utf-8 character-encoding

174
推荐指数
8
解决办法
9万
查看次数

什么是位屏蔽?

我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.

c terminology bit-manipulation bitmask bitwise-operators

162
推荐指数
2
解决办法
24万
查看次数

如何防止 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
查看次数