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

我试图在URL中使用阿拉伯语/波斯语/波斯语字符作为Codeigniter中的一个子弹,如下所示:

我创建了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

我试着像这样清空empty_uri_chars:

$config['permitted_uri_chars'] = '';

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

参考方案

解决方案很简单:

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

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

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

如果错误与allowed_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 strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

php:拆分字符串,直到第一次出现数字 - php

我有像cream 100G sup 5mg Children 我想在第一次出现数字之前将其拆分。所以结果应该是array( array('cream','100G'), array('sup','5mg Children') ); 可以告诉我如何为此创建图案吗?我试过了list(…