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

Convert single quote to separators in the url_title function in CodeIgniter

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

目前,函数删除单引号。在法语中,单引号(撇号)是单词分隔符。

例如:“L'apostrophe”的预期 slug 是“l-apostrophe”,而不是“[=26” =]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']+

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

\s+ 匹配 1+ 个空白字符,这些字符将被分隔符替换。你可以把它变成一个字符 class [\s']+ 并重复 1+ 次。那么这里匹配的内容将被替换为$separator

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

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

在数组末尾添加以下行:

'/\'/' => ' '

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