如何更改德语变音符号以获得友好的URL?

时间:2017-04-27 15:07:44

标签: php url

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

$word = 'my-word-äöß';

但似乎德国的变音符号不能在URL中。有没有办法把它们放在那里,但没有转换它们?

$notWantedResult = 'Your-word-%C3%A4%C3%B6%C3%9F'

这是使用URL编码,但它很脏。 :(

2 个答案:

答案 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