Preg_replace多个模式

时间:2012-06-27 09:40:34

标签: php preg-replace

我正在忙于一个网站,对于一个使用preg_replace的元素,用短划线替换所有空格。

preg_replace('/\\s/', '-', $item_replace_en[0])

这很有效,但现在我遇到了一个新问题。用户输入以下“音乐/电影”。 输出是“音乐 - / - 电影”,我希望它是“音乐电影”。

我该如何做到这一点?

3 个答案:

答案 0 :(得分:2)

看起来你正在尝试生成一个可以用作URL的字符串。

当用户添加要转换为URL安全字符串的标题时,可能会发生许多情况。有人可以使用这个:

Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\
url fun.ction!?-->"); 

应该返回:

  

messd-UP-文本只是对压力测试,我们-小清洁URL功能

你的代码准备好了吗?在这种情况下,您可以使用此功能:

setlocale(LC_ALL, 'en_US.UTF8');
function toAscii($str, $replace=array(), $delimiter='-') {
    if( !empty($replace) ) {
        $str = str_replace((array)$replace, ' ', $str);
    }

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

    return $clean;
}

答案 1 :(得分:1)

您可以在模式和替换文本中使用数组。 例如

$pattern=array();
$pattern[0]="/\\s/";
$pattern[1]="/-\/-/";
$replace=array();
$replace[0]="-";
$replace[1]="-";
preg_replace($pattern, $replace, $item_replace_en[0]);

您可以使用所需数量的模式和替换。 有关详细信息,请参阅http://php.net/manual/en/function.preg-replace.php

答案 2 :(得分:0)

试试这个:

$returnValue = preg_replace('/(\\s\\/)?(\\s)/', '-',$item_replace_en[0]);

但这不会取代"Music/ Film""Music /Film"Music/Film之类的字符串。