【问题标题】:PHP Slug Generation Function Giving Improper OutputPHP 蛞蝓生成函数给出不正确的输出
【发布时间】:2019-01-19 15:30:45
【问题描述】:

我正在使用下面的代码来获取我从 ajax 调用发送的正确 slug。

$slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', $_POST['slug'])));

但是,正在发生的事情是。如果从 ajax 请求中我得到任何类似蛞蝓的东西

蛞蝓:top-5-ways--to-avoid-list-

我想从 slug 中删除不需要的 - 连字符和任何数值,并想要下面的 slug

蛞蝓:top-ways-to-avoid-list

我无法理解代码有什么问题。

【问题讨论】:

  • 这段代码有什么问题?

标签: php php-5.3 slug


【解决方案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

演示: https://3v4l.org/ljtlZ

与您现有的代码修剪多个字符 - 或空格

<?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'),'- '));
?>

演示: https://3v4l.org/aBtHI

【讨论】:

  • 我还想从字符串中删除任何数值,如果我输入 top 5 ways to get in top 它会给我top-5-ways-to-get-in-top
  • 代码完美运行,但我们不能像上面发布的答案那样更有效地使用它,它只有两行并且运行良好。当我们使用这个函数时,它可能会根据处理以毫秒为单位产生影响
  • @AkshayShrivastav 再次查看答案。我已使用您现有的代码通过一次修剪 多个 字符来解决此问题。
【解决方案2】:

您可以再次修剪以从字符串两侧删除多余的“-”。

   $slug = strtolower(trim(preg_replace('/[^A-Za-z]+/', '-', 'top-5-ways--to-avoid-list-')));
    echo trim($slug, '-');

结果:top-ways-to-avoid-list

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 2016-12-08
    • 2013-12-18
    • 2017-05-11
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多