проверка логина норвежскими буквами - PullRequest
0 голосов
/ 01 апреля 2012

У меня возникла эта действительно раздражающая проблема на php-сайте, который я программирую и надеюсь использовать источник знаний, который представляет собой stackoverflow, чтобы помочь преодолеть его.

Логика подтверждения входа в систему такая:

  1. Вы регистрируетесь, и вам отправляется письмо. Письмо содержит URL с вашим именем пользователя и идентификатором, который будет сопоставлен с идентификатором, хранящимся под вашим именем пользователя в таблице. (Через $ _GET)

  2. Если функция найдет 1 строку с совпадающим идентификатором и именем пользователя, она будет проверена на «да» для этого пользователя.

Это все работает нормально, пока вы не используете имена с æ ø или å в них. Как Йорген. Функция проверки почты была изменена, чтобы приспособиться к этому, превратив URL во что-то вроде

www.myphppage.com / index.php? Войти = J% F8rgen & ID = 62185505683314306498

Я сделал php-функцию, которая проверяет вход в sql print и правильно печатает как Jørgen на html-странице. В программе mysql workbench имя также корректно отображается в таблице.

Если я пытаюсь выбрать * из database. user_reg WHERE login = '{$ login}' , однако, это не совпадает, и mysql_num_rows возвращает 0. Если я пытаюсь сделать то же самое с только идентификатор, хотя он совпадает и возвращает 1, как и должно. Я думаю, что ошибка должна лежать где-то в запросе.

Моя страница индекса использует charset = iso-8859-1 и моя база данных использует Latin-1_general ci

Помощь приветствуется

-Johann

Ответы [ 3 ]

0 голосов
/ 01 апреля 2012

Какой набор символов используется для подключения к вашему серверу mysql?

У меня была похожая проблема: php-скрипт в utf-8, сгенерированная страница в utf-8, база данных в utf-8, но связь между script и mysql в latin_1 (iso-8859-1).

Я решил это с помощью команды SET character_set_connection после инициализации моего объекта PDO. кодировки-соединение

0 голосов
/ 01 апреля 2012

Проблема в том, что эти символы не декодируются автоматически с помощью магических кавычек PHP, но другие части, закодированные в URL, были декодированы, поэтому использование rawurldecode потенциально может повредить сообщение.Но если бы у вас был доступ к исходному значению имени, переданному (полностью закодированному), вы могли бы использовать rawurlencode() для получения ваших символов.

Но магические кавычки можно отключить только на системном уровне , так что это сделка "все или ничего" (которая отстой).

0 голосов
/ 01 апреля 2012

Используйте функцию base64_encode ().

$url='www.myphppage.com/index.php?ver='.base64_encode($login.'|'.$id);

, а затем ...

$data=explode('|',base64_decode($_GET['ver']));
$login=$data[0];
$id=$data[1];
...