Греческий язык + php и mysql

KeTal

Новичок
Греческий язык + php и mysql

Здравствуйте!

Есть скрипт отправки формы в базу данных. Это input и textarea. Туда вставляется текст на греческом языке (GR). Скрипт с данными делает только addslashes(stripslashes($var)). База данных в кодировке utf8_general_ci, таблицы все тоже в UTF8.

Когда вставляю текст греческий (Αναζήτηση), в базе он оказывается русскими буквами (БнбжЮфзуз).

Как бороться?

стоит php5 mysql5 linux debian
 

Фанат

oncle terrible
Команда форума
addslashes(stripslashes($var)).
ээээээ.... а можно поинтересоваться, каков смысл этой замысловатой конструкции?

Тебе надо установить кодировку соединения
http://phpfaq.ru/charset

Если я правильно понимаю, то это greek
ну, или другую - в какой кодировке там у тебя эти данные.
 

KeTal

Новичок
set names greek не помогает. При записи текст подменяется русскими буквами, хотя на этот форум греческий текст в сообщении вставляется нормально:

Αναζήτηση

Где еще может быть проблема? В /usr/share/mysql/charsets/ greek.xml есть.
 

WP

^_^
Юзай utf8 в скрипте, а в базе используй поле без кодировки (бинарное).
 

WP

^_^
fixxxer
Имхо должен быть так чтобы что положил, то и взял, не божеское дело нагружать бд работой с кодировками.
 

KeTal

Новичок
Krishna,
Если я ставлю set names utf8, то у меня сбивается и русский язык тоже и греческий не отображается. Сложность заключается в том, что это система управления, а сайт на 3-х языках и страницу в греческой кодировке смотреть не получится -- там все по-русски.

WP
При binary Αναζήτηση сохраняется как БнбжЮфзуз (как и в самом начале было).
 

fixxxer

К.О.
Партнер клуба
WP
ну в принципе внутреннее представление текста в mysql и так утф8 - не думаю что много сэкономишь, зато гарантированно не получишь ситуации, когда текст обрезается посреди символа. хотя подход имеет право на жизнь, если все что нужно это "положить" и "забрать", ну и пожалуй единственный когда надо смешивать несовместимые кодировки
 

WP

^_^
KeTal
> При binary Αναζήτηση сохраняется как БнбжЮфзуз (как и в самом начале было).
binary не знает понятия символ. Этот чувак по кличке бёнари знает как запоминать наборы чисел от 0 до 255, ты ему их насвисти а он их тебе потом повторит по требованию.

-~{}~ 30.01.08 03:57:

fixxxer
> текст обрезается посреди символа
Я не обрезаю средствами БД. Если предполагается короткая версия, я сохраняю в отдельном поле. Ибо highload.
 

fixxxer

К.О.
Партнер клуба
это само собой разумеется, я тут вспомнил например нелепую ситуацию с включенным mb overload, когда непонятно было, как определеить длину строки в байтах ;) впрочем, правила "длина в байтах = 3 * длина юникод строки" достаточно.
 

KeTal

Новичок
zerkms
http://phpfaq.ru/charset

WP
Что-то мне не верится, что на этом форуме тип поля бинари стоит. Тут ведь работает, хотя кодировка у страницы windows-1251 в браузере стоит. В любом случае банари мне не помог. У меня вообще в my.cnf прописан init_connect=SET NAMES cp1251, т.к. если этого там не будет, то вместо русского текста "???". Я там пробовал поставить
UTF-8.

Что касается отдачи кодировки сервером, то у меня стоит windows-1251, если ставить utf8, то все "по-китайски".

Причем при добавлении поля через phpmyadmin у меня этот текст сохраняется как надо и выводится в phpmyadmin тоже как надо. А в моих скриптах он выводится "???"
 

zerkms

TDD infected
Команда форума
Что-то мне не верится, что на этом форуме тип поля бинари стоит. Тут ведь работает, хотя кодировка у страницы windows-1251 в браузере стоит. В любом случае банари мне не помог.
имея cp1251 в браузере ты не можешь делать выводы, какая кодировка в БД. да хоть koi8

У меня вообще в my.cnf прописан init_connect=SET NAMES cp1251, т.к. если этого там не будет, то вместо русского текста "???". Я там пробовал поставить
UTF-8.

Что касается отдачи кодировки сервером, то у меня стоит windows-1251, если ставить utf8, то все "по-китайски".
вот именно поэтому, я думаю, тебе стоит всё таки прочитать ссылку, которая прозвучала в топике уже 3 раза
 

KeTal

Новичок
Автор оригинала: zerkms
имея cp1251 в браузере ты не можешь делать выводы, какая кодировка в БД. да хоть koi8
Про БД этого форума я выводов и не делаю. Я говорю о том, что при кодировке cp1251 греческий язык нормально отображается. Правда здесь греческие символы заменены на & # 913 ; & # 957 ;. Может проще так и сделать? (Только как?)

zerkms, эту статью я читал уже давно. Вместо того, чтобы во всех скриптах ставить set names cp1251 я поставил это один раз в конфиге Mysql. "init_connect=SET NAMES cp1251". При попытке поставить UTF-8 у меня перестают отображаться русские буквы. Более того на этом же сервере лежит скрипт vbulletin, в котором все нормально отображается и сохраняется. Т.е. база тут не виновата.
 

zerkms

TDD infected
Команда форума
zerkms, эту статью я читал уже давно. Вместо того, чтобы во всех скриптах ставить set names cp1251 я поставил это один раз в конфиге Mysql. "init_connect=SET NAMES cp1251". При попытке поставить UTF-8 у меня перестают отображаться русские буквы.
ты не поверишь, но ссылку тебе дали потому, что там объяснение этого чудного, для тебя, феномена

Т.е. база тут не виновата.
конечно. тут виноваты только твои руки
 

WP

^_^
При чем здесь булка (этот форум) ? Думать надо своей головой, а не ориентироваться на кого-то, особенно на некошерные решения вроде того что на этом форуме. Ибо следует всё хранить в UTF-8, а не извращаться с мнемониками.
Если тебе не нужно работать со строками на уровне СУБД, то юзай binary и не думай о кодировках в БД. Если всё же нужно, храни в поле с кодировкой UTF-8, ставь SET NAMES utf8, и отдавай клиенту так же.

-~{}~ 30.01.08 06:47:

. У меня вообще в my.cnf прописан init_connect=SET NAMES cp1251, т.к. если этого там не будет, то вместо русского текста "???". Я там пробовал поставить
UTF-8.

Что касается отдачи кодировки сервером, то у меня стоит windows-1251, если ставить utf8, то все "по-китайски".

Причем при добавлении поля через phpmyadmin у меня этот текст сохраняется как надо и выводится в phpmyadmin тоже как надо. А в моих скриптах он выводится "???"
Методом тупого научного тыка надо изучать только камасутру, а в программировании надо использовать моск.
Если ты не ставишь ничего у тебя latin1 и ясное дело будут вопросительные знаки т.к. данные у тебя в 1251. Если ты ставишь utf-8 то разумеется не будет верного результата.
Переведи данные в utf-8 и поставь такой же names.
 

Фанат

oncle terrible
Команда форума
WP
можно попросить тебя помолчать?

-~{}~ 30.01.08 15:19:

Krishna
Страница никому ничего не должна. Вся эта катавасия с кодировками в мускуле и устроена только для того, чтобы стираницамогла быть в любой кодировке, никак не зависящей от БД.

-~{}~ 30.01.08 15:28:

KeTal
Тебе надо сделать три вещи.
1. Определиться с кодировкой БД. То ты говоришь
База данных в кодировке utf8
то -
отдачи кодировки сервером, то у меня стоит windows-1251
В КАКОЙ КОДИРОВКЕ У ТЕБЯ ТАБЛИЦЫ?
В КАКОЙ КОДИРОВКЕ ДАННЫЕ В НИХ?
Без ответа на эти два вопроса говорить не о чем!

2. Определиться с кодировкой страниц. Если у тебя она разная - на одних русская, на других греческая, то надо соответственно на них настраивать соединение с базой

3. Если хочешь, чтобы на любой странице можно было писать и читать на любом языке - и страницы, и база должны быть в utf8

я поставил это один раз в конфиге Mysql. "init_connect=SET NAMES cp1251"
ну и дурак.
При попытке поставить UTF-8
послушай.
В статье, которую ты "читал давно", не написано "напиши utf8, и все сразу заработает"!!!
Там написано, как вообще работает вся эта кухня с кодировками. Надр ПРОЧЕСТЬ, потом ПОНЯТЬ, и только после этого ПИСАТЬ!!!
Не "утээф вооосемь", а то, что подходит для твоего случая!

-~{}~ 30.01.08 15:28:

и нельзя делать, как ты сейчас - писать в базу греческий под видом 1251
 

KeTal

Новичок
*****
спасибо за ответ.

после обновления mysql до 5 версии у меня на всех сайтах (их более 100) вместо русских букв были вопросительные знаки и не важно - я писал скрипты, или клиенты хостинга, или это phpbb. Что мне оставалось делать? Все базы перегонять? Кому надо тот в скрипте utf8 укажет.

В КАКОЙ КОДИРОВКЕ У ТЕБЯ ТАБЛИЦЫ?
В КАКОЙ КОДИРОВКЕ ДАННЫЕ В НИХ?
База utf8
таблицы utf8
данные:
я сделал дамп, прописал у себя "set names utf8" и выполнил этот дамп. т.ч. данные теперь точно в utf8, но с русскими буквами появилась проблема: их вообще в базе нет. это после дампа.
 

zerkms

TDD infected
Команда форума
после обновления mysql до 5 версии у меня на всех сайтах (их более 100) вместо русских букв были вопросительные знаки и не важно - я писал скрипты, или клиенты хостинга, или это phpbb. Что мне оставалось делать? Все базы перегонять? Кому надо тот в скрипте utf8 укажет.
с нормально написанными скриптами никаких проблем быть не должно
не понимаю всей этой паники - всё моё перехало с 4.0 на 4.1 и 5.0 без проблем вообще

База utf8
таблицы utf8
данные:
я сделал дамп, прописал у себя "set names utf8" и выполнил этот дамп. т.ч. данные теперь точно в utf8, но с русскими буквами появилась проблема: их вообще в базе нет. это после дампа.
а это потому, что надо понимать, что ты делаешь
такое подозрение - что тебя надо упрашивать наконец прочитать текст по ссылке и включить мозг, извини за прямоту
 
Сверху