【问题标题】:URL slug with Scandinavian letters带有斯堪的纳维亚字母的 URL slug
【发布时间】:2014-06-10 22:39:25
【问题描述】:

我发现了一个非常简洁的脚本,可以将大量文本转换为 URL slug(参见第 3 点)。它就像一个魅力,直到文本包含以下字母之一:ÆØÅ。如果出现这些字母之一,则 $tag 变为空白(之后不会在 MySQL 中插入任何内容)。

为什么会这样,我应该如何解决?如果可能的话,我希望这些字母可以这样转换:Æ>ae - Ø>oe - Å>AA

(1) 我的 HTML 字符集设置为

charset="iso-8859-1"

(2) 我的 MySQL phpmyadmin 中的字段排序规则设置为

utf8_danish_ci

(3) 这是我的代码的样子:

// 将非字母或数字替换为 -
$tag = preg_replace('~[^\\pL\d]+~u', '-', $tag);

// 修剪
$tag = trim($tag, '-');

// 音译
$tag = iconv('iso-8859-1', 'UTF-8', $tag);

// 小写
$tag = strtolower($tag);

// 删除不需要的字符
$tag = preg_replace('~[^-\w]+~', '', $tag);

谢谢!

【问题讨论】:

    标签: php mysql string


    【解决方案1】:

    代码最后一行中的正则表达式正在过滤掉这些字符。 \w 匹配任何单词字符 [a-zA-Z0-9_] 并且斯堪的纳维亚字符不属于此范围。

    您提到要转换这些字符,您可以在开头使用简单的str_replace 进行转换,如下所示:

    更新:我们还需要移动图标v

    // transliterate
    $tag = iconv('iso-8859-1', 'UTF-8', $tag);
    
    $tag = str_replace(array('Æ', 'Ø', 'Å'), array('ae', 'oe', 'AA'), $tag);
    
    // replace non letter or digits by -
    $tag = preg_replace('~[^\\pL\d]+~u', '-', $tag);
    
    // trim
    $tag = trim($tag, '-');
    
    // lowercase
    $tag = strtolower($tag);
    
    // remove unwanted characters
    $tag = preg_replace('~[^-\w]+~', '', $tag);
    

    【讨论】:

    • 您好,当我使用您的 str_replace() 函数时,$tag 变为空。为什么是这样?我应该更改字符集吗?
    • @amadeo - 非常抱歉!我的代码有错误!我有一个糟糕的代码日。更新了答案中的代码。
    • 没问题嘿嘿,感谢帮助!无论如何,代码仍然不起作用。它仍然“清空”$tag。
    • 这真的很奇怪,因为我用上面的代码创建了一个测试脚本,并在末尾设置了$tag = 'testing ÆØÅ';echo $tag。当我运行它时,它给了我这个输出:testing-aeoeaa
    • iconv() 函数会不会导致问题?
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2018-08-14
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多