【问题标题】:String to SEO-friendly slug字符串到 SEO 友好的 slug
【发布时间】:2020-10-30 16:39:50
【问题描述】:

我需要将一些字符串更改为对 SEO 友好的 slug。我想我很接近这个:

str_replace(array(" ", "&", "(", ")", ".", ",", " - ", "'"), array("-", ""), strtolower($str))

但是,我仍然遇到一些问题。这是当字符串有破折号或 & 时:

I & GN Hospital and Nurses' Quarters

产生i--gn-hospital-and-nurses-quarters 而不是期望的 i-gn-hospital-and-nurses-quarters

我还想在创建 slug 之前去掉 () 中包含的所有内容。例如:

Mary Kate Hunter (November 8, 1866 - April 15, 1945)

应该变成mary-kate-hunter

我想在创建 slug 之前,我需要先使用另一个 str_replace 来删除它,并且可能使用某种正则表达式。还是有更好的办法?

【问题讨论】:

标签: php regex


【解决方案1】:

您可以将此代码与preg_replace 一起使用,而不是str_replace,以使用正则表达式进行替换。

$s = 'I & GN Hospital and Nurses' Quarters';
echo preg_replace("/[\h&(),'-]+/", '-', preg_replace('/\h*\([^)]*\)/', '', $s));
//=> I-GN-Hospital-and-Nurses-Quarters

$p = 'Mary Kate Hunter (November 8, 1866 - April 15, 1945)';
echo preg_replace("/[\h&(),'-]+/", '-', preg_replace('/\h*\([^)]*\)/', '', $p));
//=> Mary-Kate-Hunter

这里:

  • preg_replace('/\h*\([^)]*\)/', '', $s):从输入中删除 (...) 文本
  • preg_replace("/[\h&(),'-]+/", '-', $str):用- 替换所有选中的字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多