Не понятно из-за чего появляются ероглифы

garlian

Новичок
Не понятно из-за чего появляются ероглифы

Есть текстовое поле для поиска в базе данных, когда пользователь вводит слово или фразу она попадает в таблицу, что бы потом можно было видеть, что искали. Латинские буквы нормально заносяться в таблицу, а литовские буквы бывают появляются в таблицы слова с ереглифами, например ų, вместо этого ероглифа должна быть литовская буква. Таких случаев не так уж и много, но они есть и я не могу понять, откуда и как пользователь вводит, что в базу попадает ероглиф. Поисковая фраза передаётся через GET метод, кодировка на сайте UTF-8. Как решить эту проблему?
 

dimagolov

Новичок
garlian, строка GET запроса часом не JS-ом формируется? Кодировка сайта точно отдается правильно в заголовках?
 

garlian

Новичок
Dreammaker
с базой всё нормально, так как ероглифы попадают в базу нечасто, обычно всё нормально записывается.

dimagolov
нет, просто форма с методом get, скрипт берёт из get-a нужно значение и инсертит в таблицу. Да, всё правильно.
 

dimagolov

Новичок
garlian, начни с того, что локализируй проблему. то есть добейся повторяемости эффекта. это может быть конкретная форма, конкретный браузер. прогони страницу с формой через валидатор, убедись что там нет косяков.

скрипт берёт из get-a нужно значение и инсертит в таблицу
после того, как локализируешь проблему, покажи код который берет значение из $_GET и делает вставку в базу. только его.
 

Sawa

Новичок
Буквы могут быть не багом скриптов\базы, а фичей клиентов( в случае если баг повторяется очень редко). Существует много мобильников, смартфонов, терминалов которые живут совсем отдельной жизнью. Так же не учтено что может быть кривая локализация на на некоторых машинах, в следствии которой на клиенте данный(битый) символ отображается корректно( к примеру нестандартный язык на маке, сделанный фанами, или любительская установка кодировки на домашнюю линух машину )

Если не установлена кодировка, символ не определится браузером и отобразится как мляут. если скопипастить данный символ он часто сохраняется как 1-2 битых байта ( 1-2 символа непохожих на первоначальный вариант, длинна зависит от буквы и кодировки )
 

dimagolov

Новичок
— в адресную строку вводит.
или через букмарки. потому что в отрыве от странице для которой однозначно указана кодировка разные браузеры кодируют не-ASCII символы в URL по-разному, вернее из разных кодировок (e.g. UTF-8/Win-1251).

Вообще в принципе идея писать в базу что-то из $_GET параметров крайне дурацкая. GET нужен там, где надо сохранять/передавать букмарки, POST там, в остальных случаях. Даже поиск лучше сделать через POST с хранением и хешированием параметров запросов, во избежание проблем с кодированием.
 

garlian

Новичок
Ясно, вывод такой, нужно переделывать поиск, если хочу избавиться от этих ероглифов. Пока может сделаю, что бы отбрасывались фразы с ероглифами и не попадали в базу.
 
Сверху