在 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 字符更改为指定的拉丁文