Problem with cyrillic characters in friendly url

北城以北 提交于 2019-12-31 02:31:56

问题


Here's the thing. I have friendly urls like

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

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

The last segment is actually the friendly title of the blog article. The problem is when I try to pass that segment to the database, the cyrillic fonts turn into something like %D1%8A%D0%B4%D1%80%D0%BE%D1%81%D1%8 and couldn't match the database record. In the address bar in my browser it looks normal (мъдростта-на-вековете) but if I choose 'copy url location' the last segment again turns into these strange characters. I'm using CodeIgniter and everything is set to UTF-8.

Please help! :(


回答1:


The text is just being encoded to fit the specification for URLs.

Echo out the data to a log to see what you are actually trying to pass to the database.

You should be able to decode it with urldecode.




回答2:


The above answers are ok, but if you want to use routing with cyrillic it isn't enough. For example if you have http://site.com/блог/статия/мъдростта-на-вековете you will have to do something like this:

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

In system/core/URI.php , in the function _explode_segments(), you can change

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

to

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

This will solve the above problem plus controllers and functions.




回答3:


Actually, Firefox is cheating you here: the URL actually is url-encoded, but is shown as if it wasn't. So copy-pasting and retrieving it on the server will have the URL encoded.

(Not sure if other browsers behave in the same way.)



来源:https://stackoverflow.com/questions/4926016/problem-with-cyrillic-characters-in-friendly-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!