【问题标题】:PHP: Replace a unicode symbolPHP:替换一个unicode符号
【发布时间】:2012-09-19 05:12:44
【问题描述】:

$str = str_replace ('–', '-', $str); 不起作用(较长的 Unicode 破折号字符不会按照我的意愿替换为减号字符。

$str 是从数据库中读取的,应该是 UTF-8。

PHP 代码从 Apache 服务器运行。

我需要用减号替换所有这些长破折号。


$dash = "–";
回声“字符串:”。 bin2hex($str) 。 “,破折号:”。 bin2hex($dash) 。 "\n";
回声“字符串:”。 $str 。 “,破折号:”。 $破折号。 "\n";

字符串:5a656c626f726166202623383231313b20d0bdd0bed0b2d18bd0b920d0bfd180d0b5d0bfd0b0d180d0b0d18220d0b4d0bbd18f20d0bbd0b5d187d0b5d0bdd0b8d18f20d0bcd0b5d0bbd0b0d0bdd0bed0bcd18b,破折号:e28093
字符串:Zelboraf – новый препарат для лечения меланомы,破折号:–

出了什么问题(不是正确的 UTF-8):字符串还是破折号?

【问题讨论】:

  • $str is read from a database and should be in UTF-8 应该是还是它?字符串和包含脚本的文件都应该是 UTF8。那么你的 sn-p 应该可以工作了。
  • $str 是 UTF-8,脚本是 UTF-8。但它不起作用:-(
  • 请将a hex-dump$str'–' 添加到您的问题中。一个可以验证您是否从数据库中获取 UTF-8,另一个可以验证您是否从文件中获取。
  • 我添加了十六进制转储。我看到字符串的十六进制转储中没有“破折号”子字符串,但我不明白出了什么问题:$str 或 $dash。

标签: php string unicode utf-8


【解决方案1】:

这是一个 HTML 实体编码的“-” :-) 那是我的失败。

【讨论】:

    【解决方案2】:
    <?php
    
    $str = 'Test–asd';
    
    $old = '–';
    $new = '!';
    
    $str = str_replace ( $old, $new, $str );
    
    echo $str;
    
    ?>
    

    这对我来说很好用:

    输出:

    Test!asd
    

    似乎你有不同编码的问题,而不是 UTF8 字符的变化。

    【讨论】:

      【解决方案3】:

      编辑:

      试试这个:

      $str = str_replace('\xe2\x80\x94', '-', $str);
      

      试试:

      $str = str_replace(chr(150), '-', $str);    // endash
      

      $str = str_replace(chr(151), '-', $str);   // emdash
      

      我觉得第二个更适合你。

      【讨论】:

      • 它不起作用。破折号不替换为减号。
      猜你喜欢
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 2023-04-04
      • 2012-08-05
      • 2018-04-19
      • 2011-04-26
      • 2011-01-29
      相关资源
      最近更新 更多