Windom Earle
Windom Earle

Reputation: 668

Problem with cyrillic characters in friendly url

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! :(

Upvotes: 4

Views: 11157

Answers (3)

Stefan Petrov
Stefan Petrov

Reputation: 51

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.

Upvotes: 4

giraff
giraff

Reputation: 4711

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.)

Upvotes: 2

Quentin
Quentin

Reputation: 943214

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.

Upvotes: 6

Related Questions