用XML表示子弹"•"

Tec*_*rat 1 php xml character-encoding html-entities

与此问题类似, 我正在使用一种XML产品,其中包含一些非法字符.我严重怀疑我能让他们解决问题,但我会尝试.在此期间,我想要一个解决方法.

问题是它包含一颗子弹.它在我的源代码中呈现为".".我尝试了一些编码转换,但没有找到有效的组合.(我不习惯甚至考虑我的编码类型,所以我不在这里.)所以,我尝试了下面的内容,似乎str_replace无法识别"•".(它在我的文本编辑器中呈现为高块)您可以看到注释行,我尝试了一些不同的东西.

我首先在"""上尝试str替换,然后调整周围,这是我最新的:

// deal with bullets in XML.
$bullet="•"; //this was copied and pasted from transliterated text.
//$data=iconv( "UTF-8", "windows-1252//TRANSLIT", $data ); //transliterate the text:
//$data=str_replace($bullet,'•',$data); // replace the bullet char
$data=str_replace($bullet,' - ',$data); // replace the bullet char
//$data=iconv( "windows-1252", "UTF-8", $data ); // return the text to utf-8 encoding.
Run Code Online (Sandbox Code Playgroud)

任何想法如何剥离或替换这个字符?如果有预先清理XML的功能,那就太棒了,我不必担心它.

M8R*_*w5r 8

根据定义,XML没有非法字符.如果某个字符串包含不属于XML的字符,则根据定义,该字符串不是XML .

您关注的字符是Unicode的一部分.由于XML基于Unicode,这是个好消息.让我们来命名你的目标:

所以你现在说它呈现为•.因为U + 2022在UTF-8中被编码为0xE2 0x80 0xA2,所以假设您使用UTF-8编码的字符串(这是XML btw中使用的默认编码)或多或少安全的假设,但命令软件将其视为一些单字节编码,因此将单个代码点转换为三个不同的字符:

相反,您需要命令渲染应用程序使用UTF-8编码.那应该立即解决你的问题.因此,找到引入错误编码的位置,您可能不需要重新编码,只是为了正确提示编码.

如果你想知道哪个单字节字符编码在相应的字节(0xE2 0x80 0xA2)有这三个Unicode字符,这里是一个列表.我突出了其中最受欢迎的一个:

  • ISO-8859-15(拉丁文9)
  • OEM 858(多种语言拉丁语I +欧元)
  • Windows 1252(拉丁文I)
  • Windows 1254(土耳其语)
  • Windows 1256(阿拉伯语)
  • Windows 1258(越南)