Php 如何更改德语umlauts以获得友好的URL?
我有问题,我的友好URL应该是这样的:Php 如何更改德语umlauts以获得友好的URL?,php,url,Php,Url,我有问题,我的友好URL应该是这样的: $word = 'my-word-äöß'; 但似乎德国umlauts不能在URL中。有没有办法把它们放在那里,但不转换它们 $notWantedResult = 'Your-word-%C3%A4%C3%B6%C3%9F' 这是URL编码,但它是脏的:(它们不能在URL中,但我的建议是使用它们各自的有向图 $word = 'Your-word-äöß' $german = array( "ä"=>"ae",
$word = 'my-word-äöß';
但似乎德国umlauts不能在URL中。有没有办法把它们放在那里,但不转换它们
$notWantedResult = 'Your-word-%C3%A4%C3%B6%C3%9F'
这是URL编码,但它是脏的:(它们不能在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);
url中不能有特殊字符,但可以将任何字符串转换为url兼容。 eszett(ß)可以转换为
ss
,在德语中有效()
为每个角色进行替换是一件很麻烦的事,并且会导致bug,因为您最终会错过一些东西,从而导致不符合要求的url
我做了一个函数,我对几个字符集进行了测试,它似乎运行得很好:
下面是它的功能,每行一行:
将每个非unicode字符替换为破折号$str=preg_replace('#[^\\p{L}\d]+#u','-',$str);
删除第一个和最后一个字符(如果它们是破折号)$str=trim($str,“-”);
将字符串转换为ascii(不带重音的字符集)。$str=iconv(mb_detect_encoding($str),'us ascii//translatit',$str);
选项意味着它将转换为最接近的可用匹配,将特殊字符转换为正确的、符合url的版本(我已经尝试了eszetts和umlauts)//translat
将字符串转换为小写$str=strtolower($str);
删除任何剩余字符,以防其他函数跳过某些字符$str=preg_replace('#[^-\w]+#',''$str);
该函数可以在这里测试:,它将
my word-ääää
转换为my word-aoss这是my word-äääää
您的word的预期输出-%C3%A4%C3%B6%C3%9F
,这取决于您想用它做什么;url\u encode
是有原因的。但是有些域名有特殊字符s、 还有另一种编码:结果应该是my word aeoess
才能正确。还有使用两个ascii字母的ä、ö、ü的版本:ae、oe、ue。请注意,此列表中缺少大写字符“Ä”=>“ae”等。