0

我有一个 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));

结果如下:

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

知道为什么吗?

4

1 回答 1

1

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

然而,匕首和双匕首在 unicode 表中更进一步:0x20200x2021分别。因此,在对它们进行编码时没有混淆。

认为问题可能是由于 PHP 文件本身被编码为单字节字符集,而正是这导致了0xA7. 确保您的 PHP 文件以正确的格式编码,否则它将对您的字符串做出错误的假设。

于 2013-08-22T12:14:17.777 回答