Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP кодировка для записи в БД

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Скрипт работает следующим образом:
html-сущности аяксом, пост-запросом отправляются на PHP-файл, а тот сохраняет полученный текст в БД.
Кодировка страницы которая выводит этот текст - windows-1251. Кириллические символы выводятся некорректно, если не отобразить в режиме браузера utf-8. Кодировка базы данных - cp1251_general_ci.
 
Подскажите, пожалуйста, какие есть варианты выхода из ситуации.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 00:13 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1
есть же тема - MySQL: Проблема с кодировками

Цитата:
Кодировка базы данных - cp1251_general_ci

а у таблицы какая кодировка?
посмотрите напрямую в базу как сохраняется. если там читабельно, значит после выборки идет в уникоде.
кодировку клиенту перед работой с базой указываете?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 00:27 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У таблицы кодировка та же.
Смотрел. Не читабельно и в БД.
 

Цитата:
 
 кодировку клиенту перед работой с базой указываете?
 

Какому клиенту? Не понял о чем вы?
 
Добавлено:
Если сохранить полученные данные $_POST в файл, все корректно отображается.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 00:37 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Не читабельно и в БД.  

значит уже загоняете в базу в уникоде. вообще то ajax (раньше, по крайней мере) передавал все в уникоде.
 

Цитата:
Какому клиенту? Не понял о чем вы?

php клиент.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 00:43 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пробовал так:

Код:
header("Content-type: text/html; charset=windows-1251");

 
Результат не читабельный.
 
Добавлено:
А в файле по прежнему читабельный.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 00:46 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Пробовал так

это не имеет отношения. у вас текст в уникоде, сам сказали.  
заголовками вы можете лишь попросить отобразить информацию в том или ином виде, но не перекодировать текст в другую кодировку.
начинать нужно с того, в каком виде все попадает в базу. если в уникоде (но если cp1251 collation, то не знаю как поведет себя база), то при выводе из нее уже получаете уникод. для 1251 нужно перекодировать перед сохранением в базу или уже перед выводом.
 
я бы вообще не стал делать 1251, а хранил все в уникоде - удобнее.
файл может быть читабельным и в уникоде.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 00:52 29-08-2015 | Исправлено: Mavrikii, 00:54 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выходит, в юникоде.
Даже не знаю, что имеется в виду. Какие-то настройки файла конфигурации?

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 00:54 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Даже не знаю, что имеется в виду. Какие-то настройки файла конфигурации?

я же спросил, указываете базе кодировку клиента? дал же ссылку
MySQL: Проблема с кодировками

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 00:57 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дело в том что на сайте будет достаточно много кириллических символов.
Поэтому хочу сделать в 1251.
Не знаю как перекодировать. iconv не работает.

Код:
iconv( 'UTF-8', 'windows-1251', $_tracklist);

 
Добавлено:

Цитата:
mysql_query("set CHARACTER SET cp1251"); //force cp1251 codepage
сразу после mysql_connect  

Попробовал. Без изменений.
До этого пробовал так:

Цитата:
mysql_set_charset('cp-1251', self::$db);

Тоже не помогло.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 00:58 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1
во первых забываем о mysql, только mysqli
 

Цитата:
Дело в том что на сайте будет достаточно много кириллических символов.

эм.. уникод покрывает все
 
дайте ссылку на страницу, посмотрим что и в каком виде отправляется.
 

Цитата:
mysql_query("set CHARACTER SET cp1251"); //force cp1251 codepage  

SET NAMES 'cp1251'
 

Цитата:
SET NAMES indicates what character set the client will use to send SQL statements to the server. Thus, SET NAMES 'cp1251' tells the server, “future incoming messages from this client are in character set cp1251.” It also specifies the character set that the server should use for sending results back to the client. (For example, it indicates what character set to use for column values if you use a SELECT statement.)

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 01:08 29-08-2015 | Исправлено: Mavrikii, 01:11 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 дайте ссылку на страницу, посмотрим что и в каком виде отправляется.

К сожалению не могу. Все локально. Ну а что, разве результат от mysqli изменится? Сомневаюсь.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 01:12 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Ну а что, разве результат от mysqli изменится?

нет, но вы делаете ненужную работу - mysql расширение скоро уберут.
 
сделайте
Цитата:
SET NAMES 'cp1251'  


Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 01:12 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 нет, но вы делаете ненужную работу - mysql расширение скоро уберут.  

Знаю, в документации написано.
 

Код:
mysql_query("SET NAMES 'cp1251'");

Не помогло.
 
Можно перекодировать юникод с помощью php-функции?

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 01:18 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Не помогло.  

должно помочь только для новых записей.
 

Цитата:
Можно перекодировать юникод с помощью php-функции?

для начала нужно определить в каком виде все приходит скрипт.
 
http://php.net/manual/en/function.mb-check-encoding.php

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 01:20 29-08-2015
a1eksei1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну смотрите.
Кириллица у меня в php-файле. Дальше она выводится в яваскрипте в строке, далее эта строка отправляется с помощью функции $.post(), и приходит в php-файл, который сохраняет в БД данные полученные из массива $_POST.
 
Добавлено:
У меня это в голове не укладывается.
Ведь раньше делал скрипты и аякс отправлял данные и они сохранялись в БД в кириллице и все нормально выводилось.
 
Добавлено:
Нет. Ну правда. Столько сайтов в 1251. Неужели нигде не используется сохранение текста 1251 в БД? Что-то не так.
 
Добавлено:

Код:
$str=iconv("UTF-8", "windows-1251//TRANSLIT", $str);

 
Оказывается iconv работает, просто я ошибся. Забыл присвоить значение.
Все кодируется.

Всего записей: 89 | Зарегистр. 26-05-2015 | Отправлено: 01:23 29-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a1eksei1

Цитата:
Оказывается iconv работает, просто я ошибся. Забыл присвоить значение.  
Все кодируется.

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

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 02:25 29-08-2015
AlexHote

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iconv всегда работает
возможно данные кривые до него
сохранял что угодно в любой кодировке через яваскрипт пхп в майэскуэл и мсэскуэл
 
эксперементируйте на разных этапах с выводом и отладкой

Всего записей: 174 | Зарегистр. 27-05-2005 | Отправлено: 18:04 11-09-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP кодировка для записи в БД


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru