我正在使用下面的代码来获取从ajax调用发送的正确信息。
$slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', $_POST['slug'])));
但是,正在发生的事情。如果从ajax请求中获取任何类似slug的
子弹:top-5-ways--to-avoid-list-
我想修剪段中不需要的-
连字符和任何数值,并希望下面的段
子弹:top-ways-to-avoid-list
我无法理解该代码出了什么问题。
答案 0 :(得分:1)
您可以再次修剪以从字符串的两侧删除多余的'-'。
$slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top-5-ways--to-avoid-list-')));
echo trim($slug, '-');
结果:避免访问的榜首
答案 1 :(得分:1)
以这种方式塞住您的字符串,它将删除不需要的字符,包括-
。
trim()作为第二个参数您要删除的所有字符。因此,请看一下注释行THIS WILL FIX YOUR EXISTING PROBLEM
<?php
function slugify($string, $delimiter = '-'){
$clean = preg_replace("/[^a-zA-Z\/_|+ -]/", '', $string);
$clean = strtolower($clean);
$clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);
$clean = trim($clean, $delimiter); // THIS WILL FIX YOUR EXISTING PROBLEM
return $clean;
}
echo slugify('-Top ways-to avoid list-');
echo PHP_EOL;
echo slugify('top 5 ways to get in top');
?>
输出:
top-ways-to-avoid-list
top-ways-to-get-in-top
或,并使用现有代码修剪多个字符-
或空格
<?php
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', '-Top ways-to avoid list-'),'- '));
echo PHP_EOL;
echo strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top 5 ways to get in top'),'- '));
?>