我正忙于一个网站,对于一个元素,我使用 preg_replace 用破折号替换所有空格。
preg_replace('/\\s/', '-', $item_replace_en[0])
这很好用,但现在我遇到了一个新问题。用户输入了以下“音乐/电影”。输出是“音乐/电影”,我希望它是“音乐电影”。
我怎样才能做到这一点?
我正忙于一个网站,对于一个元素,我使用 preg_replace 用破折号替换所有空格。
preg_replace('/\\s/', '-', $item_replace_en[0])
这很好用,但现在我遇到了一个新问题。用户输入了以下“音乐/电影”。输出是“音乐/电影”,我希望它是“音乐电影”。
我怎样才能做到这一点?
看起来您正在尝试生成一个可用作 URL 的字符串。
当用户添加要转换为 URL 安全字符串的标题时,可能会发生许多情况。例如,有人可以使用这个:
Mess'd up --text-- just (to) stress /test/ ?our! `little` \\clean\\
url fun.ction!?-->");
应该返回:
messd-up-text-just-to-stress-test-our-little-clean-url-function
你的代码准备好了吗?在这种情况下,您可以使用此功能:
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;
}
您可以在模式和替换文本中使用数组。例如
$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
尝试这个 :
$returnValue = preg_replace('/(\\s\\/)?(\\s)/', '-',$item_replace_en[0]);
但这不会替换类似"Music/ Film"
or "Music /Film"
or的字符串Music/Film
。