奇怪的UTF8字符串比较

Jam*_*mes 4 php xml string utf-8

我有UTF8字符串比较这个问题,我真的不知道,它开始让我头痛.请帮帮我.
基本上我有一个用UTF8编码的xml文档中的字符串:'MinaTidigareanställningar'
当我将该字符串与我自己键入的字符串完全相同时:'MinaTidigareanställningar'(也在UTF8中).结果是假!
我不知道为什么.太奇怪了.有人可以帮我吗?

Pis*_*3.0 22

这似乎有点相关.为简化起见,有几种方法可以在Unicode(因此是UTF8)中获取相同的文本:例如,this:?可以写成一个字符?或两个字符:r组合 ?.

您最好的选择是normalizer类 - 将两个字符串规范化为相同的规范化形式并比较结果.

在其中一条注释中,您将显示字符串的这些十六进制表示:

4d696e61205469646967617265 20   616e7374 c3a4   6c6c6e696e676172  // from XML
4d696e61205469646967617265 c2a0 616e7374 61cc88 6c6c6e696e676172 // typed
        ^^-----------------^^^^1         ^^^^^^2
Run Code Online (Sandbox Code Playgroud)

注意我标记的部分,显然这个问题有两个部分.

  • 首先,观察字节序列"c2a0"含义的这个问题 - 由于某种原因,您的输入被转换为XML文件具有正常空间的不可破坏空间.请注意,在"Mina"之后的两种情况下都有正常的空间.不知道该怎么做在PHP中,除了与正常空间,以取代所有空格.

  • 至于第二个,即我上面概述的情况下:c3a4ä(U + 00E4"带分音符的拉丁小写字母A" -一个字符,两个字节),而61a(U + 0061"拉丁小写字母A" -一个字符,一个字节)cc88并将是组合变音符号"(U + 0308"COMBINING DIAERESIS" - 两个字符,三个字节).这里,规范化库应该是有用的.