php - 如何使用带有 UTF-8 的 Codeigniter 路由(如阿拉伯字符 404)

标签 php codeigniter utf-8 arabic-support farsi

我尝试在 URL 中使用阿拉伯语/波斯语/波斯语字符作为 Codeigniter 中的 slug,如下所示:

我创建了 MY_url_helper.php 帮助程序文件,以将阿拉伯字符添加为 url_title Codeigniter 函数中可接受的字符

/**
 * Create URL Title that allows Arabic characters
 *
 * Takes a "title" string as input and creates a
 * human-friendly URL string with a "separator" string 
 * as the word separator.
 *
 * @access  public
 * @param   string  the string
 * @param   string  the separator
 * @return  string
 */
function url_title($str, $separator = '-', $lowercase = FALSE) {
    if ($separator == 'dash') {
        $separator = '-';
    } else if ($separator == 'underscore') {
        $separator = '_';
    }
    $q_separator = preg_quote($separator);
    $trans = array(
        '&.+?;' => '',
        '[^[U+0621]-[U+064a]a-z0-9 _-]' => '',
        '\s+' => $separator,
        '(' . $q_separator . ')+' => $separator
    );
    $str = strip_tags($str);
    foreach ($trans as $key => $val) {
        $str = preg_replace("#" . $key . "#i", $val, $str);
    }
    if ($lowercase === TRUE) {
        $str = strtolower($str);
    }
    return trim($str, $separator);
}

然后我必须在 config.php 文件中启用阿拉伯字符作为允许的 uri 字符:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';  
$config['permitted_uri_chars']  .= 'لإ-لآ-أ-لآ-ض-ص-ث-ق-ف-غ-ع-ه-خ-ح-ج-د-ط-ك-م-ن-ت-ا-ل-ب-ي-س-ش-ئ-ء-ؤ-ر-ل-ا-ى-ة-و-ز-ظ-إ';

我是这样测试的

http://dev/ar/pages/index/مهمتنا

一切正常,缺少的是路线。

就像英语中的一样:

$route['^(en|ar)/mission'] = "pages/index/mission";

我希望它能以阿拉伯语工作:

$route['^(en|ar)/مهمتنا'] = "pages/index/مهمتنا";

这给出了404

我尝试像这样清空 allowed_uri_chars:

$config['permitted_uri_chars'] = '';

我仍然遇到同样的问题;没有路线的链接工作正常,有路线的链接给了我 404

最佳答案

解决方案很简单:

routes.php配置文件中执行以下操作:

$mission = urlencode('مهمتنا');
$route['^(en|ar)/'.$mission] = "pages/index/".$mission;

无需更改 config.php 配置文件中的permissed_uri_chars

如果错误与 permissed_uri_chars 相关,则输出将为 400 “您提交的 URI 包含不允许的字符。” 不是404 正如您可以在 system/core/URI.php 第 231 行看到的:

if (!preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))
{
    show_error('The URI you submitted has disallowed characters.', 400);
}

关于php - 如何使用带有 UTF-8 的 Codeigniter 路由(如阿拉伯字符 404),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019825/

相关文章:

php - 许多平台,相同的核心代码库,最佳策略?

PHP - 例如,当需要条件 html block 时如何避免 "echo"HTML

去除标签的 PHP 函数,白名单标签和属性列表除外

php - 更改wordpress上导航栏的布局

php - 如何使用 <td> 和 rowspan 对数据库中的值进行分组?

javascript - 更改 themeforest 主题的 js 功能

CodeIgniter - 私有(private)函数

mysql - 将 MySQL 表从 Latin1 转换为 UTF8 时整理丢失的信息

java - UTF8编码问题?

utf-8 - 如何在 Pharo 中读取和写入 Unix 域套接字?