【问题标题】:Replacing non UTF8 characters替换非 UTF8 字符
【发布时间】:2011-11-22 01:30:44
【问题描述】:

在 php 中,我需要替换字符串中的所有非 UTF8 字符。但是,不是通过某些等价物(例如 //TRANSLITiconv 函数),而是通过某些选定的字符(例如 "_""*")。

通常我希望用户能够看到找到无效字符的位置。

我没有找到任何可以做到这一点的函数,所以我打算使用:

  • 使用iconv//IGNORE
  • 对两个字符串进行比较,然后在非 UTF8 字符串的位置插入所需字符

你有没有更好的方法来做到这一点,php 中是否有一些函数可以结合起来产生这种行为?

感谢您的帮助。

【问题讨论】:

    标签: php encoding utf-8


    【解决方案1】:

    这里有 2 个功能可以帮助您实现接近您想要的目标:

    //reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
    $some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
     '|[\x00-\x7F][\x80-\xBF]+'.
     '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
     '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
     '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
     '?', $some_string );
    
    //reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
    $some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
     '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );
    

    请注意,您可以通过更改位于 preg_replace('blablabla', **'?'**, $some_string) 的字符串来更改替换(当前为“?”)。

    原文:http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多