4

我在stackoverflow上找到了下面的脚本,它用破折号替换了特殊字符,以建立干净的url。但是,它做得不好,因为它用破折号代替标点符号,如下面的“坏”示例所示。所以,相反,我希望明确标点符号不要被任何东西替换,而是要被删除......没有空格,没有破折号。对此的任何帮助将不胜感激。

例子:

今天的天气很热!

好的:

今天天气很热

坏的:

今天天气很热

这个脚本做了不好的例子......如何让它做好事?:

function slugUrl($string) {
    $string = strtolower($string);
    $string = preg_replace('/[^a-zA-Z0-9]/i','-',$string);
    $string = preg_replace("/(-){2,}/",'$1',$string);
    return $string;
}
4

2 回答 2

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;
}
于 2012-12-30T16:09:23.127 回答
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))
     );
}
于 2012-12-30T16:21:04.297 回答