$string = strtr($string,
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ",
"aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr");因此,下面的代码行将特殊字符转换为普通字符。然而,它并没有像它应该的那样返回我的角色。
例如:
Thïs is á tëst返回:
thrs-is-r-trst似乎每一个特殊的字符都会作为列表中的最后一个字母返回。
完整的代码片段:
$string = strtr($_POST['title'],
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ",
"aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr");
$string = trim($string);
$string = str_replace (" ", "-", $string);
$string = preg_replace('/[^a-zA-Z0-9-]/', '', $string);
$string = strtolower($string);发布于 2014-03-31 09:25:02
来自TFM
如果给定三个参数,则此函数将返回
str的副本,其中from中每个(单字节)字符的所有出现都已转换为to中的相应字符,也就是说,$from[$n]的每次出现都被$to[$n]替换,其中$n是两个参数中的有效偏移量。
strtr将输入字符串视为单字节字符。但是,您几乎可以肯定地将它们编码为多字节字符,因此它们没有被正确地解析。您应该使用strtr的第二种形式:
如果给出两个参数,第二个参数应该是一个
array('from' => 'to', ...)形式的数组。返回值是一个字符串,其中所有数组键的出现都被相应的值替换。最长的钥匙先试一试。一旦一个子字符串被替换,它的新值将不再被搜索。
$string = strtr($_POST['title'], array('À' => 'a', 'Á' => 'a', ...));这应该正确地处理多字节字符串。
https://stackoverflow.com/questions/22757813
复制相似问题