c2a0和20字符串比较

时间:2016-01-21 14:14:50

标签: php regex utf-8

我有两个utf-8字符串:

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

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

  • 我保存为变量的字符串呈现为20 bin2hex(ascii编码空格符号)
  • 我在外部使用mb_strtolower($string, 'utf-8')处理的字符串呈现为c2a0 bin2hex(utf-8空格)

我的问题是:

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

1 个答案:

答案 0 :(得分:1)

正如评论c2a0中所述no-break space20正常space

既然您可以在bin2hex中看到问题,那么您可以:

$str = hex2bin(str_replace('c2a0', '20', bin2hex($str)));

或换句话说:

$str = preg_replace('~\xc2\a0~', ' ', $str);