Php 如何更改德语umlauts以获得友好的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",

我有问题,我的友好URL应该是这样的:

$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

我做了一个函数,我对几个字符集进行了测试,它似乎运行得很好:

下面是它的功能,每行一行:

  • $str=preg_replace('#[^\\p{L}\d]+#u','-',$str);
    将每个非unicode字符替换为破折号
  • $str=trim($str,“-”);
    删除第一个和最后一个字符(如果它们是破折号)
  • $str=iconv(mb_detect_encoding($str),'us ascii//translatit',$str);
    将字符串转换为ascii(不带重音的字符集)。
    //translat
    选项意味着它将转换为最接近的可用匹配,将特殊字符转换为正确的、符合url的版本(我已经尝试了eszetts和umlauts)
  • $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”等。