c2a0 和 20 字符串比较

Vel*_*aro 6 php regex utf-8

我有两个 utf-8 字符串:

  • 一个保存为php文件中的变量(以UTF-8保存)
  • 另一个通过正则表达式从另一个外部获取。

当我比较这两个相同的空格分隔字符串时,结果为 false,这意味着它们不同。

  • 我保存为变量的字符串呈现20bin2hex ascii 编码的空格符号)
  • 我从外部获取并处理的字符串mb_strtolower($string, 'utf-8')呈现为c2a0bin2hexutf-8 空格)

我的问题是:

  1. 为什么当我保存为 utf-8 字符串时,未完全编码为 utf-8(即 ascii 中的空格)?
  2. 如何摆脱这个问题?

Ad *_*cks 4

正如评论中所说,c2a0这是一个不间断的空间,并且20是正常的空间

由于您可以在 bin2hex 中看到问题,因此您可以:

$str = hex2bin(str_replace('c2a0', '20', bin2hex($str)));
Run Code Online (Sandbox Code Playgroud)

或者换句话说:

$str = preg_replace('~\xc2\xa0~', ' ', $str); // typo corrected
Run Code Online (Sandbox Code Playgroud)