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

时间:2017-06-16 07:19:38

标签: php encoding utf-8 multibyte

我有两个字符串变量 - 第一个变量是在代码($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的格式/编码?

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

1 个答案:

答案 0 :(得分:3)

所以你有2个字符串:

313420d0b8d18ed0bdd18f - 这会使用0x20个字符作为空格。

3134c2a0d0b8d18ed0bdd18f - 这使用0xC2A0字节序列作为空格(它是Unicode的非破坏空间)。

除了这些空格之外,字符串是相同的。

要使用常规空格替换类似于空格的unicode字符,可以使用以下正则表达式:

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

参考文献: