【问题标题】:HTML Special characters: † and &Dagger in an DOMDocumentHTML 特殊字符:DOMDocument 中的 † 和 &Dagger
【发布时间】:2013-08-25 03:18:09
【问题描述】:

我有一个 dom 文档,我想在其中添加一些特殊字符。

我要做的是首先用正则表达式检测字符串中的特殊字符。 为此,我正在使用

转换 html 上的 utf-8 字符
$string = "Test string 1,§,†,‡";
$string_html = htmlentities($string_html, ENT_QUOTES, "UTF-8");

这很好用,我快到了:

"Test string 1,§,†,‡"

现在,我只想获取特殊字符。我正在使用一个正则表达式,它返回一个数组:

[0] => '&sect';
[1] => '&dagger';
[2] => '&Dagger';

现在,我想将这些特殊字符附加到我的 dom 文档中,但使用 unicode。我正在尝试:

$string_utf8 = html_entity_decode($string_html);

$dom_output->createElement( 'string', utf8_encode($string_utf8));

结果如下:

§ 字符显示为 §,而 † 和 ‡ 保持不变。

知道为什么吗?

【问题讨论】:

  • PHP 不是我的语言,但 utf8_encode 调用看起来应该是不必要的。你认为你为什么需要那个电话?
  • @Alohci,我需要它,因为在执行 $dom_output->createElement() 时,我需要 utf-8 编码字符串,因为我的 dom 文档是 utf8

标签: php html xml dom encoding


【解决方案1】:

§ 的问题在于它位于 unicode 表中的位置 0xA7。但是,该特定字符被编码为两字节序列0xC2A7。您的输出被渲染为 ISO-8859-1 或类似的编码,导致这个 (0xC2) 出现在您想要的字符之前(因为巧合的是它具有相同的最后一个字节 - 它不需要,我经常看到 é 编码为é例如)

然而,匕首和双匕首在 unicode 表中更远:分别为 0x20200x2021。因此,在对它们进行编码时不会造成混淆。

认为问题可能是由于 PHP 文件本身以单字节字符集编码引起的,而这正是导致 0xA7 出现问题的原因。确保你的 PHP 文件以正确的格式编码,否则它会对你的字符串做出错误的假设。

【讨论】:

  • 感谢您的回答@Kolink。你在想哪个 php 文件?我不明白你。对不起
  • 嗯,我认为是包含$string = "Test string..."; 的文件。
  • 事实上,我也是从 DOMDocument 中得到的。
猜你喜欢
  • 2011-09-28
  • 2018-08-05
  • 2011-04-23
  • 2019-07-08
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多