【发布时间】:2011-07-18 20:01:59
【问题描述】:
我看到网站接受任何字符串并用单个 - 替换所有非字母数字字符
我该怎么做?
【问题讨论】:
-
这被称为“slugifying”一个 URL。它比单个正则表达式涉及更多。您使用什么语言?
我看到网站接受任何字符串并用单个 - 替换所有非字母数字字符
我该怎么做?
【问题讨论】:
我在捷克语中使用了这样的函数:
function Slugify($string) {
$withdiacritic = array_merge(str_split("říšěžťčýůňúěďáéó", 2), array(" ", "/"));
$woutdiacritic = array_merge(str_split("riseztcyunuedaeo", 1), array("-", "-"));
$string = mb_strtolower($string);
$string = str_replace($withdiacritic, $woutdiacritic, ($string));
$string = preg_replace('/[^a-zA-Z0-9-]/', '-', $string);
return $string;
}
附加值是它比将所有非标准字符转换为-更具可读性。
编辑
您可能还想添加一行
$string = preg_replace('~-{2,}~', '-', $string);
摆脱长 - 序列。
【讨论】:
在 PHP 中?
可能有更好/更有效的模式,但我只是通过这个函数传递我的字符串:
function remove_accents($str)
{
return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($str, ENT_QUOTES, 'UTF-8'));
}