在 CodeIgniter 的 url_title 函数中将单引号转换为分隔符

Posted

技术标签:

【中文标题】在 CodeIgniter 的 url_title 函数中将单引号转换为分隔符【英文标题】:Convert single quote to separators in the url_title function in CodeIgniter 【发布时间】: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\']+ 是的,它可以工作,并且将单引号更改为双引号也可以完成这项工作。但我更喜欢按照你的建议逃避它。你能简单解释一下这两条线背后的机制吗? 【参考方案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替换掉

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

【讨论】:

以上是关于在 CodeIgniter 的 url_title 函数中将单引号转换为分隔符的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 的 url_title() 将 UTF8 字符更改为指定的拉丁文

在 codeigniter 中实现 slug

pipeline

mysql查询一随机?

如何在没有 codeIgniter MVC 框架的情况下使用数据库 codeigniter 类?

如何在codeigniter中集成swfupload