我发现了一个非常简洁的脚本,可以将大量文本转换为URL slug(参见第3点)。它的工作就像一个魅力,直到文本中包含以下字母之一:ÆØÅ。如果出现其中一个字母,则$ tag变为空白(之后在MySQL中没有插入任何内容)。
为什么会这样,我该如何解决?我希望如果可能的话,字母会像这样转换:Æ> ae - Ø> oe - Å> AA
(1)我的HTML字符集设置为
charset="iso-8859-1"
(2)MySQL phpmyadmin中字段的排序规则设置为
utf8_danish_ci
(3)这就是我的代码的样子:
// replace non letter or digits by - $tag = preg_replace('~[^\\pL\d]+~u', '-', $tag); // trim $tag = trim($tag, '-'); // transliterate $tag = iconv('iso-8859-1', 'UTF-8', $tag); // lowercase $tag = strtolower($tag); // remove unwanted characters $tag = preg_replace('~[^-\w]+~', '', $tag);
谢谢!
答案 0 :(得分:1)
代码最后一行的正则表达式将这些字符过滤掉。 \w
匹配任何字符[a-zA-Z0-9_]
,斯堪的纳维亚字符不属于此范围。
您提到要转换这些字符,您可以在开头使用简单的str_replace
进行转换:
更新:我们还需要移动iconv
// 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);