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

时间:2011-02-07 20:12:09

标签: php mysql codeigniter friendly-url

这就是事情。我有像

这样友好的网址
  

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。

请帮忙! :(

3 个答案:

答案 0 :(得分:6)

正在对文本进行编码以符合URL的规范。

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

您应该能够使用urldecode对其进行解码。

答案 1 :(得分:4)

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

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

system/core/URI.phpfunction _explode_segments(),您可以更改

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

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

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

答案 2 :(得分:2)

实际上, Firefox在这里欺骗你:网址实际上是网址编码,但显示为不是。因此,在服务器上复制粘贴和检索它将对URL进行编码。

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