友好网址中的西里尔字符问题

Posted

技术标签:

【中文标题】友好网址中的西里尔字符问题【英文标题】:Problem with cyrillic characters in friendly url 【发布时间】:2011-06-22 23:58:09 【问题描述】:

事情就是这样。我有友好的网址,例如

http://site.com/blog/read/мъдростта-на-вековете

http://site.com/blog/read/green-apple

最后一段实际上是博客文章的友好标题。问题是当我尝试将该段传递给数据库时,西里尔字体变成类似 %D1%8A%D0%B4%D1%80%D0%BE%D1%81%D1%8 并且无法匹配数据库记录。在我浏览器的地址栏中,它看起来很正常(мъдростта-на-вековете),但如果我选择“复制网址位置”,最后一段再次变成这些奇怪的字符。我正在使用 CodeIgniter 并且所有内容都设置为 UTF-8。

请帮忙! :(

【问题讨论】:

网址中不允许使用非英文字符,因此没有办法。 其实是允许的 【参考方案1】:

文本只是被编码以符合 URL 规范。

将数据回显到日志中,以查看您实际尝试传递给数据库的内容。

您应该可以使用urldecode 对其进行解码。

【讨论】:

【参考方案2】:

以上答案都可以,但是如果您想使用带有西里尔字母的路由,那是不够的。例如,如果您有http://site.com/блог/статия/мъдростта-на-вековете,您将不得不这样做:

config/routes.php$route['блог/статия/(:any)'] = "blog/article/$1";

system/core/URI.php,在function _explode_segments(),可以改

$val = trim($this->_filter_uri($val));

$val = urldecode(trim($this->_filter_uri($val)));

这将解决上述问题加上控制器和功能。

【讨论】:

【参考方案3】:

实际上,Firefox 在这里欺骗了您:该 URL 实际上是经过 url 编码的,但显示的好像不是。因此,在服务器上复制粘贴和检索它会对 URL 进行编码。

(不确定其他浏览器的行为是否相同。)

【讨论】:

以上是关于友好网址中的西里尔字符问题的主要内容,如果未能解决你的问题,请参考以下文章

带有 UTF8 字符的友好 URL

西里尔字符的 DOMPDF 问题

Unity 中的回调 OnStreamMessageHandler 仅返回西里尔字符串的一半

PHP 中的西里尔字母音译

PHP 中的西里尔字母音译

插入后 SQL 代码中的西里尔符号不正确