PHP:如何编码U + FFFD以进行替换?

red*_*ent 6 php escaping character-encoding special-characters

我正在尝试在页面上显示数据Feed.我们遇到了奇怪角色的编码问题.出于某种原因,在饲料中有U+FFFD角色.并且htmlentities()不会逃避角色,所以我需要手动更换它.(我使用的是PHP 5.3)

我尝试过以下方法:

$string = str_replace( "\xFFFD",  "_", $string );
$string = str_replace( "\XFFFD",  "_", $string );
$string = str_replace( "\uFFFD",  "_", $string );
$string = str_replace("\x{FFFD}", "_", $string );
$string = str_replace("\X{FFFD}", "_", $string );
$string = str_replace("\P{FFFD}", "_", $string );
$string = str_replace("\p{FFFD}", "_", $string );
Run Code Online (Sandbox Code Playgroud)

以上都不是.

阅读本页后 - http://php.net/manual/en/regexp.reference.unicode.php - 我不确定我做错了什么.我是否需要将UTF-8支持编译到PCRE中?

Esa*_*ija 9

您应该尝试修复原始问题,FFFD(unicode替换字符)在大多数情况下并不是真正的文本字符,而是一个尝试以UTF编码解码但是实际上没有编码的东西的符号UTF编码.它是一种替代方法,可以无声地丢弃无效字节或完全停止解码过程,无论哪种方式,如果您看到它,都会出现错误.

无法知道原始角色是什么.特别是使用您的解决方案,因为您更换了字符_,您甚至无法知道原始源被错误地解码.您应该返回源并正确解码.

注意:源文本可以?用作文字,普通字符,例如在谈论它时,那么就没有错误.我在答案中排除了这种可能性.

  • @deceze,但那些是真正的文字字符,如果我看到` `,我知道有一个错误,不知道它背后的真实文字是什么意思,除非我正确解码:P (2认同)
  • @deceze ok从unicode.org上读到这个:http://www.unicode.org/charts/PDF/UFFF0.pdf:PI把它与`FFFE`弄糊涂了:( (2认同)
  • @redolent"在其中有这个角色",你的意思是它真的出现在文件中吗?也就是说,当你对文件进行原始十六进制转储时,你会看到字节"0xEF 0xBF 0xBD"? (2认同)

Ben*_*aap 6

使用preg_replace,如下所示:

$string = preg_replace('@\x{FFFD}@u', '_', $string);
Run Code Online (Sandbox Code Playgroud)