大多数 PHP字符串函数 http://php.net/manual/en/ref.strings.php将字符串作为字节序列处理,即单字节字符 (ASCII
).
您想要替换包含多字节字符的字符串中的字符。str_replace() http://php.net/manual/en/function.str-replace.php(有点)有效,因为它不关心将字符串解释为字符。它将一个字节序列替换为另一个字节序列,仅此而已。大多数时候,它在使用时不会破坏任何东西ASCII
甚至UTF-8
编码字符串(因为方式UTF-8
被设计)。但是,使用其他编码可能会产生意想不到的结果。
当被要求处理外部字符时ASCII
范围, [str_ireplace()](http://php.net/manual/en/function.str-ireplace.php) works the same as
str_replace()`。它的“不区分大小写”功能需要将字符串拆分为字符并识别小写-大写对。但由于它不处理多字节字符,因此无法识别任何代码大于 127 的字符。
对于多字节字符串,您应该使用由多字节字符串 http://php.net/manual/en/book.mbstring.phpPHP 扩展。
它提供的唯一用于字符串替换的功能是mb_ereg_replace() http://php.net/manual/en/function.mb-ereg-replace.php(不区分大小写的版本mb_eregi_replace() http://php.net/manual/en/function.mb-eregi-replace.php)但它们对你帮助不大(因为它们不支持数组)。
如果要替换的字符列表是固定的,我的建议是使用str_replace() http://php.net/manual/en/function.str-replace.php包含这两种情况的字符列表:
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_replace(
array('č', 'ć', 'đ', 'š', 'ž', 'Č', 'Ć', 'Đ', 'Š', 'Ž'),
array('c', 'c', 'd', 's', 'z', 'c', 'c', 'd', 's', 'z'),
$str
);