我有一个dom文档,我想在其中添加一些特殊字符。
我要做的是首先用regexp检测字符串中的特殊字符。为此,我将html上的utf-8字符转换为
$string = "Test string 1,§,†,‡";
$string_html = htmlentities($string_html, ENT_QUOTES, "UTF-8");这很好,我马上就到了:
"Test string 1,§,†,‡"现在,我只想得到特殊的角色。我使用的是regexp,它返回的数组有:
[0] => '§';
[1] => '&dagger';
[2] => '&Dagger';现在,我想将这些特殊字符添加到dom文档中,但使用unicode。我试着:
$string_utf8 = html_entity_decode($string_html);
$dom_output->createElement( 'string', utf8_encode($string_utf8));接下来的结果是:
§字符显示为§,而†和‡则保持不变。
知道为什么吗?
发布于 2013-08-22 12:14:17
§的问题在于它位于unicode表中的0xA7位置。但是,该特定字符被编码为双字节序列0xC2A7.您的输出被呈现为ISO-8859-1或类似的编码,因此这个(0xC2)出现在您的预期字符之前(因为巧合的是,它有相同的最后一个字节-我经常看到它被编码为c)
然而,匕首和双匕首在unicode表中的位置要远得多:0x2020和0x2021。因此,在编码它们时不存在混淆。
我认为这个问题可能是由PHP文件本身被编码成一个单字节字符集造成的,正是这一点导致了0xA7的问题。确保您的PHP文件是以正确的格式编码的,否则它将对您的字符串做出错误的假设。
https://stackoverflow.com/questions/18379663
复制相似问题