Проблема с кириллицей в дружественном URL - PullRequest
3 голосов
/ 07 февраля 2011

Вот в чем дело. У меня есть дружественные 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 и не может соответствовать записи в базе данных. В адресной строке моего браузера это выглядит нормально ( мъдростта-на-вековете ), но если я выберу «копировать адрес URL», последний сегмент снова превратится в эти странные символы. Я использую CodeIgniter и все настроено на UTF-8.

Пожалуйста, помогите! (

Ответы [ 3 ]

6 голосов
/ 07 февраля 2011

Текст просто кодируется в соответствии со спецификацией для URL.

Выведите данные в журнал, чтобы увидеть, что вы на самом деле пытаетесь передать в базу данных.

Вы должны иметь возможность декодировать его с помощью urldecode .

4 голосов
/ 23 июня 2012

Приведенные выше ответы в порядке, но если вы хотите использовать маршрутизацию с кириллицей, этого недостаточно.Например, если у вас есть 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)));

Это решит вышеуказанную проблему, а также контроллеры и функции.

2 голосов
/ 07 февраля 2011

На самом деле, Firefox обманывает вас здесь : URL фактически закодирован в URL, но отображается так, как будто это не так. Таким образом, при копировании и извлечении его на сервер будет закодирован URL-адрес.

(Не уверен, что другие браузеры ведут себя так же.)

...