【问题标题】: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。
请帮忙! :(
【问题讨论】:
标签:
php
mysql
codeigniter
friendly-url
【解决方案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 进行编码。
(不确定其他浏览器的行为是否相同。)