我有问题,我的友好网址应该是这样的:
$word = 'my-word-äöß';
但似乎德国的变音符号不能在URL中。有没有办法把它们放在那里,但没有转换它们?
$notWantedResult = 'Your-word-%C3%A4%C3%B6%C3%9F'
这是使用URL编码,但它很脏。 :(
答案 0 :(得分:4)
他们的德语变音符号不能在URL中,但我的建议是使用他们各自的有向图。
$word = 'Your-word-äöß'
$german = array(
"ä"=>"ae",
"ö"=>"oe",
"ß"=>"ss",
"ü"=>"ue",
"æ"=>"ae",
"ø"=>"oe",
"å"=>"aa",
"é"=>"e",
"è"=>"e"
);
$friendlyLink = str_replace(array_keys($german),
array_values($german),
$word);
答案 1 :(得分:0)
您的网址中不能包含特殊字符,但您可以将任何字符串转换为符合网址的字符串。
eszett(ß)可以转换为ss
,这在德语中有效(see Wikipedia article)
为每个角色进行替换是一种痛苦,并导致错误,因为你最终会错过一些东西,导致不符合规定的网址。
我创建了一个我已针对多个字符集进行测试的函数,它看起来很顺利:check the function seoUrl in this file。
这就是它的作用,每行一行:
$str = preg_replace('#[^\\p{L}\d]+#u', '-', $str);
将每个不是unicode字符的字符替换为短划线。$str = trim($str, '-');
删除第一个和最后一个字符(如果它们是破折号)$str = iconv(mb_detect_encoding($str), 'us-ascii//TRANSLIT', $str);
将字符串转换为ASCII(不带重音符的字符集)。 //TRANSLIT
选项意味着它将转换为最接近的可用匹配项,将特殊字符转换为正确的符合网址的版本(我已尝试使用eszetts和umlauts)$str = strtolower($str);
将字符串转换为小写$str = preg_replace('#[^-\w]+#', '', $str);
删除任何剩余的字符,以防其他功能跳过某些内容。可以在此处测试该功能:http://tests.brillault.fr/fonctions/string_to_url.php,它会将my-word-äöß
转换为my-word-aoss
。