PHP删除标点符号(无破折号)

时间:2012-12-30 16:05:44

标签: php replace character

我在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;
}

2 个答案:

答案 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))
     );
}