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

时间:2018-11-02 06:35:23

标签: regex codeigniter-3 slug slugify

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

当前,该函数删除单引号。法语中的单引号(撇号)是一个单词分隔符。

例如:“ L'apostropphe ”的预期结果是“ l-撇号”,而不是“ lapostrophe ”当前是 url_title 函数的输出。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

\s+匹配1+个空格字符,这些字符将由分隔符替换。您可以将其转换为字符类[\s']+并重复1次以上。然后将在此处匹配的内容替换为$separator

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

答案 1 :(得分:1)

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

在数组末尾添加以下行:

'/\'/' => ' '

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