我在stackoverflow上找到了下面的脚本,它用破折号替换特殊字符,以便清理url构建。但是,它并没有做得很好,因为它用破折号替换标点符号,如下面的“坏”示例所示。所以,相反,我想特别标点符号不要被任何东西替换,只是被删除...没有空格,没有破折号。任何有关这方面的帮助将不胜感激。
示例:
today's weather is hot!
好:
todays-weather-is-hot
坏:
today-s-weather-is-hot-
这个脚本做了不好的例子......如何让它做得好?:
function slugUrl($string) {
$string = strtolower($string);
$string = preg_replace('/[^a-zA-Z0-9]/i','-',$string);
$string = preg_replace("/(-){2,}/",'$1',$string);
return $string;
}
答案 0 :(得分:5)
这个怎么样? (我刚刚删除了标点符号)
function slugUrl($string){
$string = strtolower($string);
$string = preg_replace('/[!?\']/','',$string);
$string = preg_replace('/[^a-zA-Z0-9]/i','-',$string);
$string = preg_replace("/(-){2,}/",'$1',$string);
return $string;
}
答案 1 :(得分:1)
你可以先删除你不感兴趣的所有字符,然后用短划线替换空格来实现这一点。
此外preg_replace
允许在使用数组(Demo)时一次运行多个替换操作:
$subject = 'today\'s weather is hot!';
$buffer = trim(strtolower($subject));
$result = preg_replace(['/[^a-z0-9 ]/', '/\s+/'], ['', '-'], $buffer);
结果(不带引号):
"todays-weather-is-hot"
以函数的形式:
function slugUrl($string){
return preg_replace(
array('/[^a-z0-9 ]/', '/\s+/'),
array('' , '-' ),
trim(strtolower($string))
);
}