php - c2a0 和 20 字符串比较

标签 php regex utf-8

我有两个 utf-8 字符串:

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

  • 当我比较这两个相同的空格分隔字符串时,结果为 false,这意味着它们不相同。
  • 我保存为变量的字符串呈现为 20bin2hex (ascii 编码的空格符号)
  • 我从外部得到的字符串,用 mb_strtolower($string, 'utf-8') 处理呈现为 c2a0bin2hex (utf-8 空格)

  • 我的问题是:
  • 为什么当我保存在 utf-8 字符串中时没有完全编码为 utf-8(意思是 ascii 中的空格)?
  • 如何摆脱这个问题?
  • 最佳答案

    正如评论中所说 c2a0no-break space20正常 space

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

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

    或者换一种说法:
    $str = preg_replace('~\xc2\a0~', ' ', $str);
    

    关于php - c2a0 和 20 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34926154/

    相关文章:

    PHP 打印数组,每行一个键,这样看起来更容易?

    php - 在具有多个值的字符串中搜索 Symfony 3

    javascript - 用于标记查询的正则表达式

    csv - 经典 ASP - 如何使用 UTF-8 将数据保存到 CSV 文件

    java - java读取utf-8 url到字符串

    html - JSP 导入中的编码

    javascript - 使用 AJAX 发送的变量在 PHP 中未定义

    php - 如何在 php 中将选定的单选按钮值保留到下一页?

    regex - 正则表达式匹配只能在字符串中出现一次的字符?

    JavaScript 正则表达式 : why is alternation not ordered?