【问题标题】:Convert single quote to separators in the url_title function in CodeIgniter在 CodeIgniter 的 url_title 函数中将单引号转换为分隔符
【发布时间】:2019-04-06 09:52:19
【问题描述】:

在 CodeIgniter 中,url_title 函数将“title”字符串作为输入,并创建一个带有“分隔符”(破折号或下划线)的人性化 URL 字符串。

目前,删除单引号的功能。在法语中,单引号(撇号)是一个单词分隔符。

例如:“L'apostrophe”的预期 slug 是“l-apostrophe”,而不是“lapostrophe”当前是 url_title 函数的输出。

我想更新以下源代码(/system/helpers/url_helper.php - 第 493 行):

$trans = array(
    '&.+?;'         => '',
    '[^\w\d _-]'        => '',
    '\s+'           => $separator,
    '('.$q_separator.')+'   => $separator
);

由于我不熟悉 RegEx,如果有人可以帮助我在数组 $trans 中添加单引号以便将单引号转换为分隔符,那就太好了。

【问题讨论】:

  • 尝试将[^\w\d _-] 更改为[^\w\d' _-]\s+ 更改为[\s']+
  • 它不起作用,因为 RegEx 已经在引号中。
  • 如果你试图逃避它呢? [^\w\d\' _-][\s\']+
  • 是的,它可以工作,并且将单引号更改为双引号也可以完成这项工作。但我更喜欢按照你的建议逃避它。你能简单解释一下这两条线背后的机制吗?

标签: regex codeigniter-3 slug slugify


【解决方案1】:

修改 CodeIgniter 核心始终是一个问题,以确保升级和与未来版本的兼容性。我最好建议更新外来字符数组以进行音译 |文本助手使用的转换(在 /application/config/foreign_chars.php 中)。

在数组末尾添加以下行:

'/\'/' => ' '

这将在调用convert_accented_characters 函数时将单引号 ('/\'/') 转换为空格 (' ')。

【讨论】:

    【解决方案2】:

    您可以将[^\w\d _-] 替换为[^\w\d' _-],将\s+ 替换为[\s']+

    这个模式[^\w\d _-] 是一个否定的character class,它将匹配一个',并将被一个空字符串替换。如果将' 添加到现有字符类中,则不会匹配也不会被替换。

    \s+ 匹配 1+ 个空格字符,这些字符将被分隔符替换。您可以将其转换为字符类 [\s']+ 并重复 1 次以上。那么这里会匹配到的会被$separator替换掉

    在您的示例中转义 \',因为正则表达式已经在单引号之间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2020-11-24
      • 2012-05-30
      相关资源
      最近更新 更多