加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 奇怪的UTF8字符串比较

发布时间:2020-12-13 22:20:32 所属栏目:PHP教程 来源:网络整理
导读:我有UTF8字符串比较这个问题,我真的不知道,它开始让我头痛.请帮帮我. 基本上我有一个用UTF8编码的xml文档中的字符串:’MinaTidigareanst?llningar’ 当我将该字符串与我自己键入的完全相同的字符串进行比较时:’MinaTidigareanst?llningar'(也在UTF8中).结
我有UTF8字符串比较这个问题,我真的不知道,它开始让我头痛.请帮帮我.
基本上我有一个用UTF8编码的xml文档中的字符串:’MinaTidigareanst?llningar’
当我将该字符串与我自己键入的完全相同的字符串进行比较时:’MinaTidigareanst?llningar'(也在UTF8中).结果是假!
我不知道为什么.太奇怪了.有人可以帮我吗?

解决方法

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

你最好的选择是normalizer class – 将两个字符串规范化为相同的标准化形式并比较结果.

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

4d696e61205469646967617265 20   616e7374 c3a4   6c6c6e696e676172  // from XML
4d696e61205469646967617265 c2a0 616e7374 61cc88 6c6c6e696e676172 // typed
        ^^-----------------^^^^1         ^^^^^^2

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

>首先,观察this question on the meaning of byte sequence “c2a0” – 由于某种原因,您的输入被转换为XML文件具有正常空间的不可破坏空间.请注意,在“Mina”之后的两种情况下都有正常的空间.不知道如何在PHP中做什么,除了用普通空格替换所有空格.
>至于第二个,就是我在上面概述的情况:c3a4是?(U 00E4“LATIN SMALL LETTER A WITH DIAERESIS” – 一个字符,两个字节),而61是a(U 0061“LATIN SMALL LETTER A” – 一个字符,一个字节)和cc88将是组合变音符号"(U 0308“COMBINING DIAERESIS” – 两个字符,三个字节).在这里,normalization library应该是有用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读