X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Изменение кодировки на лету
anethum
anethum
Topic Starter сообщение 27.10.2010, 17:01; Ответить: anethum
Сообщение #1


Задача. Есть поисковый сайт на кодировке CP1251. Есть MySQL на CP1251. С главной страницы к базе летит запрос, ответ на страницу результатов. Все ровненько.

Стал вопрос создания мобильной версии сайта. Дизайн обрезали, дивы сделали резиновыми. Все ОК. Но CP1251 на большинстве устройств не отображается. Нужно UTF-8.

Google подсказал сделать так:
[PHP]<?php
iconv_set_encoding('internal_encoding', 'WINDOWS-1251'); // Исходная кодировка файлов
iconv_set_encoding('output_encoding' , 'UTF-8'); // Конечная кодировка
ob_start('ob_iconv_handler'); // буферизация

header('Content-Type: text/html; charset=UTF8');
?>[/PHP]

Главная страничка красиво отобразилась в юникоде.

Но! У нас есть форма поиска. И запрос из формы летит к базе в юникоде. В результате база говорит: "по вашим карякулям ничего не найдено".

Как быть? Может кто-нибудь подскажет что-нибудь более академичное.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 27.10.2010, 17:06; Ответить: Arks
Сообщение #2


http://www.php.ru/manual/ref.iconv.html
кодируйте запрос летящий в базу обратно в CP1251 функцией iconv
вообще это сложный вопрос, я бы посоветовал привести все к UTF-8
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 27.10.2010, 17:10; Ответить: alexdrob
Сообщение #3


Сохраняйте страничку в юникоде.
Делайте после соеденения с базой такой запрос

[PHP]mysql_query('set names utf8');[/PHP]

и будет вам счастье без iconv))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 27.10.2010, 17:30; Ответить: Arks
Сообщение #4


alexdrob, то что юзер введет в поиск и полетит в базу все равно по идее надо предварительно перекодировать а то в запросе к базе даже после SET NAMES будут кракозябры(которые затем перекодируются в CP1251 при соединении с базой), надеюсь конечно что я ошибаюсь, точно не могу сказать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 27.10.2010, 17:34; Ответить: Letmetouchyou
Сообщение #5


(Arks @ 27.10.2010, 20:30) *
надеюсь конечно что я ошибаюсь, точно не могу сказать.

ошибаешся. бд автомотически все сделает, если был выполнене set names
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 27.10.2010, 17:50; Ответить: alexdrob
Сообщение #6


создай таблицу
CREATE TABLE `table` (                                  
          `id` int(11) NOT NULL AUTO_INCREMENT,                  
          `name` varchar(50) DEFAULT NULL,                      
          PRIMARY KEY (`id`)                                    
        ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=cp1251

она будет в cp1251
создай скрипт

[PHP]<?php

mysql_connect('localhost','root','root');
mysql_select_db('test');
mysql_query('set names utf8');

isset($_GET['s']) && mysql_query("insert into `table` (`name`) values ('$_GET[s]')") or die(mysql_error());

?>
<form>
<input type="text" name="s"/>
<input type="submit"/>
</form>[/PHP]

сохрани в utf8 без BOM и добавь запись, предварительно убедившись что в браузере utf8 установлена кодировка,всё будет прекрасно работать))

потом измени строку
mysql_query('set names utf8');
на
mysql_query('set names cp1251');

и пересохрани файл в cp1251
выполни, опять же всё будет работать
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 27.10.2010, 18:41; Ответить: Arks
Сообщение #7


вот, о чем я и говорю.
Смысл в том что кодировка в браузере и в базе должна совпадать.

По теме автора мы что делаем: говорим браузеру: браузер, установи пожалуйста кодировку по-умолчанию UTF-8 и перекодируй все выводимые скриптом символы(в т.ч. установи кодировку input'а) в UTF-8
а скрипту который кладет данные в базу говорим: скрипт, пожалуйста все символы клади в базу в кодировке CP1251
Следовательно юзер заполнит в браузере форму, которую браузер считает в кодировке UTF-8 и захочет эту информацию положить в базу в кодировке CP1251, а она в UTF-8 => кодировки вводной и выводной информации не совпадают => кракозябры в базе.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 27.10.2010, 18:49; Ответить: alexdrob
Сообщение #8


(Arks @ 27.10.2010, 21:41) *
Смысл в том что кодировка в браузере и в базе должна совпадать.

Как раз нет!

Кодировка перекодируется сама к той которую мы указали.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 27.10.2010, 19:01; Ответить: Arks
Сообщение #9


Кодировка перекодируется сама к той которую мы указали.
перекодируется она как раз php-интерпретатором с помощью iconv, SET NAMES только указывает mysql-серверу тип сопоставления(так же как SET COLLATION в более ранних версиях)
В общем, лучше не буду спорить.. замечу только что не понмиаю тогда каким местом думали разработчики если все так как Вы описываете, думаю еще будет случай все проверить..
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 27.10.2010, 19:03; Ответить: alexdrob
Сообщение #10


где вы видите в моём примере использование iconv?)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Редактирование HTML кодировки текстов.
7 Neospeak 3877 28.11.2018, 4:20
автор: Neospeak
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыИзменение дизайна шаблона Joomla
0 neesupermario 1790 3.1.2018, 15:20
автор: neesupermario
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыИзменение шрифта в placeholder
6 Alexej_mw 2432 24.8.2017, 12:10
автор: Alexej_mw
Открытая тема (нет новых ответов) "На лету" определять пол, возраст, интересы посетителя
И исходя из этого показывать нужную рекламу пользователю
4 Velsevul 2755 12.8.2017, 17:41
автор: Nefilim11
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыИзменение цвета в шаблоне
18 shulz 3124 5.12.2016, 17:11
автор: shulz


 



RSS Текстовая версия Сейчас: 29.3.2024, 13:48
Дизайн