我正试图从数据库中获取产品名称并重写它们,名称如下所示:
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替换中,我删除了除数字和字母之外的所有奇怪字符,但当一个名称已经包含-时,将有2个空格。我的第二个替代者用两个——填满了它们。
我怎样才能让它发挥作用?
您可能可以做这样简单的事情:
$string = 'Romper bedrukt met tekst - Lime maat 68';
$slug = preg_replace('/'W+/', '-', $string));
在替换第一个替换之前,请用空格替换"-"及其任何迭代(如"-"、"-"answers"-")。
对于这些特定情况:
$string = str_replace(array(' -','- ',' '), '-', $testlink['name']);
$string = str_replace("--", "-", $string);
或者将所有空间合并为一个:
$string = preg_replace( "/'s+/", " ", $string );
第二种方法将涵盖大多数或"奇怪"的文本。
编辑:还有更短的路。两个步骤:删除奇怪的字符并将一个或多个空格替换为"-":
$string = preg_replace( "/'s+/", "-", $string );
我会这么做:
$string = 'Romper bedrukt met tekst - Lime maat 68';
$string = preg_replace("/[ -]+/", "-", $string);
echo $string,"'n";
输出:
Romper-bedrukt-met-tekst-Lime-maat-68