【问题标题】:c2a0 and 20 string comparisionc2a0 和 20 字符串比较
【发布时间】:2016-04-27 20:09:53
【问题描述】:

我有两个 utf-8 字符串:

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

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

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

我的问题是:

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

【问题讨论】:

标签: php regex utf-8


【解决方案1】:

正如 cmets 中所说,c2a0no-break space20 是正常的 space

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

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

或者换一种说法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多