友好网址中的西里尔字符问题
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 进行编码。
(不确定其他浏览器的行为是否相同。)
【讨论】:
以上是关于友好网址中的西里尔字符问题的主要内容,如果未能解决你的问题,请参考以下文章