【问题标题】:Codeigniter: How to pass UTF8 parameters to a controller using url?Codeigniter:如何使用 url 将 UTF8 参数传递给控制器​​?
【发布时间】:2023-04-09 15:29:01
【问题描述】:

我正在使用 Code-igniter 3,需要使用 URL 参数将参数传递给控制器​​。我的网址是这样的:

http://192.168.40.50/user/list/محمد

我将它添加到配置文件中:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-|آ-ی';

而我的控制器是这样的:

public function list($name)
{ 
    // The $name parameter is incorrect here
    // In this case $name = 'E-E'
}

问题是我得到的是“E-E”而不是“محمد”。

我只是搜索了很多问题,但没有找到解决方案

َ更新

我正在使用路由。参数在没有路由的情况下正确传递,但是当我添加路由时,UTF-8 字符会发生变化。我的路线是这样的:

$route['user/list/(:any)'] = 'user/list_of/$1';

【问题讨论】:

  • 为此,您尝试在列表函数中回显urldecode($name) 吗?
  • urldecode 不工作

标签: php codeigniter url utf-8 codeigniter-3


【解决方案1】:

Phil Sturgeon 详细解释了允许使用 UTF-8:这是一段摘录,后面是完整的文章链接:

在 index.php 中设置 HTTP 标头 对 CodeIgniter 的所有请求都是通过 index.php 文件发出的,该文件默认位于 system/ 文件夹之外。因此,它是为我添加 PHP 标头的理想场所。

header('Content-Type: text/html; charset=utf-8');

告诉 CodeIgniter 发生了什么 CodeIgniter 默认设置为使用 UTF-8 来实现其大部分内部功能,因此只需确保在 application/config/config.php 文件中将字符集设置为 UTF-8。

$config['charset'] = "UTF-8";

配置数据库连接

$db['default']['char_set'] = "utf8"; $db['default']['dbcollat'] = "utf8_unicode_ci";

此时您应该可以使用 UTF-8 字符,如果您想将其保存到我正在使用的数据库中,请使用此链接继续阅读:

USING UTF-8

您也可以参考这篇 stackoverflow 帖子: Using UTF-8 Stackoverflow

【讨论】:

  • 谢谢。我都做了。但是 $name 变量仍然有错误的值。例如 '(\'̯\'F'' 而不是 'بایگانی'
  • 阅读 Phil Sturgeon 的其余帖子,除了在 index.php 中添加内容头类型之外,还有一些关于向 HTML 添加 META 的额外信息。他还建议您查看其他一些资源。
  • 我认为这不再是标题的情况,他只需要对参数进行urldecode
  • 我发现这个问题只有在使用路由时才会出现。我更新了问题
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
相关资源
最近更新 更多