PHP str_replace 删除无意中删除汉字

PHP str_replace removing unintentionally removing Chinese characters

我有一个PHP脚本可以删除特殊字符,但不幸的是,一些汉字也被删除了。

<?php

function removeSpecialCharactersFromString($inputString){
    $inputString = str_replace(str_split('#/\:*?\"<>|[]\'_+(),{}’! &'), "", $inputString);
    return $inputString;
} 

$test = '赵景然 赵景然';
print(removeSpecialCharactersFromString($test));

?>

奇怪的是,输出是 赵然 赵然。字符 被删除

此外,陈 一也被删除。可能的原因是什么?

您用作要替换的内容列表的字符串不适用于混合编码。我所做的是将此字符串转换为 UTF16,然后拆分它。

function removeSpecialCharactersFromString($inputString){
    $inputString = str_replace(str_split(
            mb_convert_encoding('#/\:*?\"<>|[]\'_+(),{}’! &', 'UTF16')), "", $inputString);
    return $inputString;
}
$test = '#赵景然 赵景然';
print(removeSpecialCharactersFromString($test));

这给...

赵景然赵景然

顺便说一句 -str_replace 是 MB 安全的 - 有点认出了发帖人...... http://php.net/manual/en/ref.mbstring.php#109937