str_ireplace 相当于 str_replace
str_ireplace works as str_replace
我需要将 url 字符串中的所有本地字符(包括大写字母)替换为小的 ascii 字符。
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž'), array('c', 'c', 'd', 's', 'z'), $str);
结果 - c-c-d-s-z-Č-Ć-Đ-Š-Ž
我预计 - c-c-d-s-z-c-c-d-s-z
如何使用 str_ireplace()
函数获得预期结果。
您混淆了大小写字符。 Č
与 č
的 Unicode 不同,因此它们不相同。
尝试以下操作:
<?php
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž', 'Č', 'Ć', 'Đ', 'Š', 'Ž'), array('c', 'c', 'd', 's', 'z', 'c', 'c', 'd', 's', 'z' ), $str);
?>
大多数 PHP string functions 将字符串作为字节序列处理,即单字节字符 (ASCII
)。
您想替换包含多字节字符的字符串中的字符。
str_replace()
(有点)有效,因为它不关心将字符串解释为字符。它用另一个字节序列替换一个字节序列,仅此而已。大多数情况下,它在使用 ASCII
甚至 UTF-8
编码字符串时不会破坏任何东西(因为 UTF-8
的设计方式)。但是,使用其他编码可能会产生意想不到的结果。
当要求处理 ASCII
范围外的字符时,[str_ireplace()](http://php.net/manual/en/function.str-ireplace.php) works the same as
str_replace()`。它的 "case insensitive" 功能需要将字符串拆分为字符并识别小写-大写对。但由于它不处理多字节字符,因此无法识别代码大于 127 的任何字符。
对于多字节字符串,您应该使用 Multibyte String PHP 扩展提供的函数。
它为字符串替换提供的唯一功能是 mb_ereg_replace()
(with the case-insensitive version mb_eregi_replace()
) 但它们对您的帮助不大(因为它们不适用于数组)。
如果要替换的字符列表是固定的,我的建议是使用 str_replace()
和包含两种情况的字符列表:
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_replace(
array('č', 'ć', 'đ', 'š', 'ž', 'Č', 'Ć', 'Đ', 'Š', 'Ž'),
array('c', 'c', 'd', 's', 'z', 'c', 'c', 'd', 's', 'z'),
$str
);
您可以先将它们转为小写,
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž'), array('c', 'c', 'd', 's', 'z'), mb_strtolower($str, "UTF-8"));
我需要将 url 字符串中的所有本地字符(包括大写字母)替换为小的 ascii 字符。
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž'), array('c', 'c', 'd', 's', 'z'), $str);
结果 - c-c-d-s-z-Č-Ć-Đ-Š-Ž
我预计 - c-c-d-s-z-c-c-d-s-z
如何使用 str_ireplace()
函数获得预期结果。
您混淆了大小写字符。 Č
与 č
的 Unicode 不同,因此它们不相同。
尝试以下操作:
<?php
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž', 'Č', 'Ć', 'Đ', 'Š', 'Ž'), array('c', 'c', 'd', 's', 'z', 'c', 'c', 'd', 's', 'z' ), $str);
?>
大多数 PHP string functions 将字符串作为字节序列处理,即单字节字符 (ASCII
)。
您想替换包含多字节字符的字符串中的字符。
str_replace()
(有点)有效,因为它不关心将字符串解释为字符。它用另一个字节序列替换一个字节序列,仅此而已。大多数情况下,它在使用 ASCII
甚至 UTF-8
编码字符串时不会破坏任何东西(因为 UTF-8
的设计方式)。但是,使用其他编码可能会产生意想不到的结果。
当要求处理 ASCII
范围外的字符时,[str_ireplace()](http://php.net/manual/en/function.str-ireplace.php) works the same as
str_replace()`。它的 "case insensitive" 功能需要将字符串拆分为字符并识别小写-大写对。但由于它不处理多字节字符,因此无法识别代码大于 127 的任何字符。
对于多字节字符串,您应该使用 Multibyte String PHP 扩展提供的函数。
它为字符串替换提供的唯一功能是 mb_ereg_replace()
(with the case-insensitive version mb_eregi_replace()
) 但它们对您的帮助不大(因为它们不适用于数组)。
如果要替换的字符列表是固定的,我的建议是使用 str_replace()
和包含两种情况的字符列表:
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_replace(
array('č', 'ć', 'đ', 'š', 'ž', 'Č', 'Ć', 'Đ', 'Š', 'Ž'),
array('c', 'c', 'd', 's', 'z', 'c', 'c', 'd', 's', 'z'),
$str
);
您可以先将它们转为小写,
$str = "č-ć-đ-š-ž-Č-Ć-Đ-Š-Ž";
echo str_ireplace(array('č', 'ć', 'đ', 'š', 'ž'), array('c', 'c', 'd', 's', 'z'), mb_strtolower($str, "UTF-8"));