相同的编码 (UTF-8),但字符串和内容的长度不同 (PHP)

Same encoding (UTF-8), but different lengths of string and content (PHP)

我有两个字符串变量 - 第一个变量是在代码中手动设置的 ($date1="14 июня"),第二个是使用 cURL 和 phpQuery 从远程页面解析的。 如果我们打印两个变量,结果看起来一样,但长度和内容不同:

echo $date1; //output: 14 июня
echo $date2; //output: 14 июня
echo $date1[2]; //output is space - third symbol in string
echo $date2[2]; //output is � - it's a part of third symbol in string
echo strlen($date1); //output: 7
echo strlen($date2); //output: 12
echo mb_detect_encoding($date1) //output: UTF-8
echo mb_detect_encoding($date2) //output: UTF-8

我想知道是否有解决方案如何将 $date2 转换为 $date1 的 format/encoding?

p.s: 有关于 iconv() 的 SO 主题,但我找不到可行的解决方案。

所以你有 2 个字符串:

313420d0b8d18ed0bdd18f - 这使用 0x20 字符作为 space.

3134c2a0d0b8d18ed0bdd18f - 这使用 0xC2A0 字节序列作为 space(这是 Unicode 的不间断 space)。

除了那些 space 之外,字符串是相同的。

要用正则 space 替换类似 space 的 unicode 字符,您可以使用以下正则表达式:

preg_replace('~\p{Zs}~u', ' ', $str)

参考文献: