$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);
答案 0 :(得分:0)
来自TFM:
如果给出三个参数,则此函数返回
str
的副本,其中from
中每个 (单字节)字符的所有出现 已被翻译为to
中的相应字符,即$from[$n]
的每一次出现都已替换为$to[$n]
,其中$n
是两个参数中的有效偏移量。
strtr
将输入字符串视为单字节字符。但是你几乎肯定会将它们编码为多字节字符,因此它们没有被正确解析。您应该使用strtr
的第二种形式:
如果给出两个参数,则第二个应该是
array('from' => 'to', ...)
形式的数组。返回值是一个字符串,其中所有出现的数组键都已被相应的值替换。将首先尝试最长的密钥。替换子字符串后,将不再搜索其新值。
$string = strtr($_POST['title'], array('À' => 'a', 'Á' => 'a', ...));
这应该正确处理多字节字符串。