K.Lomov
Guest
iconv, MySQL, формы: Разъясните ситуацию с функцией
Здравствуйте,
дорогие участники конференции! D)
- Я прочитал часть информации по этому вопросу, но так и не пришел к сути. Опыта с процедурой сохранения данных в базу у меня ещё нет и поэтому, я хотел бы попросить вас прояснить мне ситуацию со связкой:
ФОРМЫ --------->--------- PHP ---------->--------- MySQL
[win1251]--->---(процедуры перекодировки)--->----[UTF-8]
Эта ситуация наверняка всем знакома, и я думаю, что информация из этого топика пригодится и другим интересующимся.
* - в отмеченном могут быть ошибки "по неопытности"
1. После отправки информации со смешанными Русскими и
Латинскими знаками я обнаружим то, что в базе данных они
сохраняются в виде совсем других символов.
Пример:
Мы летали по гаре
2. Для решения этой ошибки я решил воспользоваться функцией iconv() следующим образом: *
В обеих попытках результатом стала следующая строка...
Результат:
Мы ребята удалые, Лезим в щели половые.
А альтернативная функция utf8_encode, русский язык, как мне обьяснили - не обрабатывает.
3. После этого, я решил попробывать иной способ - перекодировать информацию при помощи "самодельной" функции:
Результат был очень положительным, в HTML всё выводилось правильно и так как нужно.
Но в базе данных, информация принимала очень неудобную форму*:
Пример:
Мы ребята удалые,
Лезим в щели половые
Теперь вопросы:
1) В ситуации номер три. Есть ли возможность сохранять данные в базу, в более "визуальном формате". Чтобы они отображались как нормальные Русские буквы, а не их HTML ASCII-код?
2) В ситуации номер два. Очень жаль, что стандартные функции не работают с Русским языком. Пробывал ли кто нибудь "навести в этом порядок" написав разработчикам?
3) Если на первый вопрос ответ будет негативным, то должен ли я перекодировать все страницы проэкта в UTF-8, для того чтобы в PHP не проходило особо больших операций перекодирования. Поможет ли это в данной ситуации?
* * *
P.S.: Я уверен, что данную тему уже не раз поднимали и за это - прошу прощения. Но хорошо если у людей будет точный ответ на все основные вопросы по пунктам, ибо сейчас нужные ответы расбросаны по разным топикам и их очень трудно найти.
Здравствуйте,
дорогие участники конференции! D)
- Я прочитал часть информации по этому вопросу, но так и не пришел к сути. Опыта с процедурой сохранения данных в базу у меня ещё нет и поэтому, я хотел бы попросить вас прояснить мне ситуацию со связкой:
ФОРМЫ --------->--------- PHP ---------->--------- MySQL
[win1251]--->---(процедуры перекодировки)--->----[UTF-8]
Эта ситуация наверняка всем знакома, и я думаю, что информация из этого топика пригодится и другим интересующимся.
* - в отмеченном могут быть ошибки "по неопытности"
1. После отправки информации со смешанными Русскими и
Латинскими знаками я обнаружим то, что в базе данных они
сохраняются в виде совсем других символов.
Пример:
Мы летали по гаре
2. Для решения этой ошибки я решил воспользоваться функцией iconv() следующим образом: *
PHP:
// $post - $_POST['data'] - полученные данные из формы
// 1. Попытка - Не работает
$post=iconv("cp1251","UTF-8",$post);
// 2. Попытка - Не работает
$post=iconv("windows-1251","UTF-8",$post);
Результат:
Мы ребята удалые, Лезим в щели половые.
А альтернативная функция utf8_encode, русский язык, как мне обьяснили - не обрабатывает.
3. После этого, я решил попробывать иной способ - перекодировать информацию при помощи "самодельной" функции:
PHP:
function utf8_encode_ru($input) {
$output = "";
for ( $i = 0; $i < strlen( $input ); $i++ )
{
$asc = ord( $input[$i] );
if ( $asc >= 192 && $asc <= 255 )
$output .= "&#".( 1040 + ( $asc - 192 ) ).";";
else if ( $asc == 168 )
$output .= "&#".( 1025 ).";";
else if ( $asc == 184 )
$output .= "&#".( 1105 ).";";
else
$output .= $input[$i];
}
return $output;
}
Результат был очень положительным, в HTML всё выводилось правильно и так как нужно.
Но в базе данных, информация принимала очень неудобную форму*:
Пример:
&#1052;&#1099; &#1088;&#1077;&#1073;&#1103;&#1090;&#1072; &#1091;&#1076;&#1072;&#1083;&#1099;&#1077;,
&#1051;&#1077;&#1079;&#1080;&#1084; &#1074; &#1097;&#1077;&#1083;&#1080; &#1087;&#1086;&#1083;&#1086;&#1074;&#1099;&#1077;
Теперь вопросы:
1) В ситуации номер три. Есть ли возможность сохранять данные в базу, в более "визуальном формате". Чтобы они отображались как нормальные Русские буквы, а не их HTML ASCII-код?
2) В ситуации номер два. Очень жаль, что стандартные функции не работают с Русским языком. Пробывал ли кто нибудь "навести в этом порядок" написав разработчикам?
3) Если на первый вопрос ответ будет негативным, то должен ли я перекодировать все страницы проэкта в UTF-8, для того чтобы в PHP не проходило особо больших операций перекодирования. Поможет ли это в данной ситуации?
* * *
P.S.: Я уверен, что данную тему уже не раз поднимали и за это - прошу прощения. Но хорошо если у людей будет точный ответ на все основные вопросы по пунктам, ибо сейчас нужные ответы расбросаны по разным топикам и их очень трудно найти.