我正在尝试从我的数据库中获取产品名称并重写它们,名称如下所示:
Romper bedrukt met tekst - Lime maat 68
这是我的重写:
$string = preg_replace("/[^ \w]+/", "", $testlink['name']);
$string = str_replace(" ", "-", $string);
当名称是:
Romper bedrukt met tekst - Lime maat 68
需要这样做:
Romper-bedrukt-met-tekst-Lime-maat-68
但它确实如此:
Romper-bedrukt-met-tekst--Lime-maat-68
你可以看到双 - 因为,在第一次preg-replace中,我删除除了数字和字母之外的所有奇怪的字符,但是当一个名字已经包含 - 时,将有2个空格。我的第二个替换填充了两个 - 。
我怎样才能让它发挥作用?
答案 0 :(得分:2)
你可以做一些简单的事情:
$string = 'Romper bedrukt met tekst - Lime maat 68';
$slug = preg_replace('/\W+/', '-', $string));
答案 1 :(得分:0)
在替换第一个替换之前,用空格替换“ - ”及其任何迭代(例如“ - ”“ - ”和“ - ”)。
答案 2 :(得分:0)
对于那些特定情况:
$string = str_replace(array(' -','- ',' '), '-', $testlink['name']);
答案 3 :(得分:0)
$string = str_replace("--", "-", $string);
或者将所有空格合并为一个:
$string = preg_replace( "/\s+/", " ", $string );
第二种方法将涵盖大多数或“奇怪”的文本。
编辑: 更短的方式。两个步骤:删除奇怪的字符并将一个或多个空格替换为“ - ”:
$string = preg_replace( "/\s+/", "-", $string );
答案 4 :(得分:0)
我会这样做:
$string = 'Romper bedrukt met tekst - Lime maat 68';
$string = preg_replace("/[ -]+/", "-", $string);
echo $string,"\n";
<强>输出:强>
Romper-bedrukt-met-tekst-Lime-maat-68