HTML特殊字符:&;匕首和&;DOMD文件中的匕首


HTML Special characters: † and &Dagger in an DOMDocument

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

结果是下一个:

§字符显示为§,而†和‡就是这样。

知道为什么吗?

§的问题在于它位于unicode表中的0xA7位置。然而,该特定字符被编码为两字节序列0xC2A7。您的输出被呈现为ISO-8859-1或类似的编码,结果是Â;(0xC2)出现在您想要的字符之前(因为巧合的是,它有相同的最后一个字节-不必,我经常看到被编码为例如

然而,匕首和双匕首在unicode表中的位置要远得多:分别为0x20200x2021。因此,在对它们进行编码时不会出现混淆。

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