[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Символы в mysql
ModaL
Собственно, сколько мучался, практически ничего не вышло.
Делаем запрос на php в БД и вносим туда текст с символом β: "Привет, как дела? β", но почему то эти символы заменяются на знак вопроса.

Кодировка страницы установлена следующая:

header('Content-Type: text/html; charset=windows-1251');

если поставить utf8, то всё будет в ромбиках.

и запрос естественно на кодировку:

mysql_query("SET NAMES utf8");


user posted image


Собственно хотел узнать, в чём проблема?



Спустя 16 минут, 40 секунд (15.07.2011 - 23:21) kovaldm написал(а):
Таблица в какой кодировке?

Спустя 3 часа, 29 минут, 32 секунды (16.07.2011 - 02:50) ModaL написал(а):
kovaldm, utf8-bin
user posted image

Спустя 34 минуты, 7 секунд (16.07.2011 - 03:24) Haotarez написал(а):
Попробуйте перед добавлением запроса преобразовать строку через iconv в utf8. Лучше, конечно, когда и скрипт и БД в одной кодировке.

Спустя 18 минут, 42 секунды (16.07.2011 - 03:43) kovaldm написал(а):
Цитата
если поставить utf8, то всё будет в ромбиках.

В файле '.htaccess' добавте строку
Цитата
addDefaultCharset UTF-8

Спустя 19 минут, 47 секунд (16.07.2011 - 04:03) ModaL написал(а):
kovaldm не помогло. http://modals.vooger.ru/.

header('Content-Type: text/html; charset=utf-8'); и в .htaccess добавил ваш код.




Haotarez, много раз пробывал. всё неудачно.

Цитата
Лучше, конечно, когда и скрипт и БД в одной кодировке.

вот это не совсем понял

Спустя 6 минут, 13 секунд (16.07.2011 - 04:09) Haotarez написал(а):
Цитата
header('Content-Type: text/html; charset=windows-1251');

У вас скрипт windows-1251 - база utf8.
Ради эксперимента попробовал в своей БД символ на отлично влез в базу и вывелся (и скрипт и база utf8).

Проверьте отображается ли в вашей phpmyadmin корректно данный символ (в ячейке БД)?

Спустя 4 минуты, 34 секунды (16.07.2011 - 04:14) ModaL написал(а):
Haotarez так я пишу шаблонизатор. А если прям зайди в phpmyadmin и добавить символ, то он естественно добавится

Спустя 5 минут, 20 секунд (16.07.2011 - 04:19) ModaL написал(а):
Вообще, если ставить в header кодировку utf8, то почему ромбики то?

Спустя 3 минуты, 42 секунды (16.07.2011 - 04:23) Haotarez написал(а):
ModaL phpmyadmin тоже написан на php : ) Я это к тому, что если символ на отлично добавляется из интерфейса phpmyadmin значит проблема точно в скрипте (точнее его кодировке) через который вы добавляете, а не кодировке БД или ее отдельных таблиц.

Если я правильно понял данный символ вы используете в качестве delimeter? Его можно несложно заменить чем-то вроде &#946, или β - это принципиально?

Спустя 1 минута, 4 секунды (16.07.2011 - 04:24) Haotarez написал(а):
ModaL есть кодировка страницы есть кодировка файла - это разные вещи. Можно например, написать кодировку cp1251, а сам файл сохранить как utf8.. Понимаете к чему я веду?

Спустя 7 минут, 8 секунд (16.07.2011 - 04:31) ModaL написал(а):
Haotarez, понимаю.
β - принципиально. Вот кстати код поста:

$userlogin = $_GET['login'];
$tmpl = $_POST['tmpl'];

mysql_query("SET NAMES utf8");

if(mysql_query("UPDATE `modal163_userv`.`users` SET `design` = '".mysql_real_escape_string($tmpl)."' WHERE `users`.`login` = '$userlogin'")) {
$type_error = '<div style="margin-left:-1px;" id="info"><b>Успешно</b><div style="padding:3px;"></div>Шаблон успешно сохранён. Новые изменения вступили в силу</div>';
echo $type_error;
} else {
$type_error = '<div id="error"><b>Ошибка</b><div style="padding:3px;"></div>При сохранении шаблона произошла неизвестная ошибка. Запрос отправлен администратору и скоро проблема будет устранена</div>';
echo $type_error;
}


может тут что-то криво?

Спустя 25 минут, 6 секунд (16.07.2011 - 04:56) Haotarez написал(а):
Да нет, тут все хорошо вроде. Попробуйте сохранить этот файл как utf8 и запустить. Должно сработать. Хотя, просмотрите что приходит постом к вам print_r($_POST) - видна ли в скрипте вся строка включая β ?

Спустя 4 минуты, 41 секунда (16.07.2011 - 05:01) ModaL написал(а):
Haotarez оказывается print_r($_POST['tmpl']); распознаёт символ.
user posted image


Это при header('Content-Type: text/html; charset=utf8');, но постит знак вопроса

Тогда blink.gif

Спустя 25 минут, 25 секунд (16.07.2011 - 05:26) Haotarez написал(а):
IDE подсказал решение, при попытке сохранить документ в cp1251 он автоматом транслетирировал "β" в "?", тоже самое происходит в БД - следовательно кодировка или таблицы или всей БД или поля design. У меня вариант заработал только с PDO.

Спустя 4 минуты, 33 секунды (16.07.2011 - 05:31) ModaL написал(а):
Не понял. PDO, что это?

Спустя 4 минуты, 29 секунд (16.07.2011 - 05:35) Haotarez написал(а):
PHP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных.

Почитайте в вики, очень удобная штука, которая помимо прочего защищает от примитивных SQL инъекций и освобождает от конструкций предварительной обработки "магических символов". Позволяет препарировать запросы что тоже порой очень удобно.

Спустя 5 минут, 21 секунда (16.07.2011 - 05:40) ModaL написал(а):
Haotarez, ничерта не понял как работает.
if(new PDO("mysql:UPDATE `modal163_userv`.`users` SET `design` = '".mysql_real_escape_string($tmpl)."' WHERE `users`.`login` = '$userlogin'")) {


что я тут наляпал? :o

Спустя 6 минут, 54 секунды (16.07.2011 - 05:47) Haotarez написал(а):
Предварительно в настройках php.ini надо включить pdo.so и pdo_mysql.so

Ну а затем :


try{
$db = new PDO("mysql:host=СЮДАХОСТ; dbname=ИМЯБАЗЫ", "ЮЗЕР", "ПАРОЛЬ");
} catch (PDOException $e){
echo $e->getMessage();
}
$db->exec("set names utf8");
if($db->exec("UPDATE `modal163_userv`.`users` SET `design` = '{$tmpl}' WHERE `users`.`login` = '{$userlogin}'")){
...
}

Спустя 3 минуты, 8 секунд (16.07.2011 - 05:50) ModaL написал(а):
Haotarez включено.

Ошибка:

Fatal error: Uncaught exception "PDOException" with message "SQLSTATE[42000] 
[1049] Unknown database ""user""" in
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code\login\1
\classes\std.pdo_singleton.class.inc:30
Stack trace: #0 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test
\trunk\code\login\1\classes\std.pdo_singleton.class.inc(30):
PDO->__construct("mysql:host=loca...", "howtopr1_vkim", "htmys2007")
#1 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code
\login\1\classes\std.mysql.class_test.inc(43): db::getConnect()
#2 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\trunk\code
\login\1\connect.php(6): MySqlDb->confirmUserPass("usertest", "passtest")
#3 {main} thrown in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs
\test\trunk\code\login\1\classes\std.pdo_singleton.class.inc on line 30


Такая ошибка может возникнуть в результате опечатки, при использовании лишних кавычек в коде для параметров host и/или dbname. Следующий код приведет к подобной ошибке:

<?php
$dbh = new PDO("mysql:host="localhost";dbname="mysql"", $username, $password);
?>


Тут с кавычками трабл теперь:

"UPDATE `modal163_userv`.`users` SET `design` = '".$tmpl."' WHERE `users`.`login` = '$userlogin'"

Спустя 6 минут, 10 секунд (16.07.2011 - 05:57) ModaL написал(а):
Haotarez вообще бред вообщем. Но интересно, как при header utf8 были нормальные буквы? А то они все в ромбики же

Спустя 23 секунды (16.07.2011 - 05:57) Haotarez написал(а):
При подключении не надо использовать доп кавычки. Просто замените русский текст в моём примере на ваши реальные значения.


Строку я вот там выше поправил, дублирую
$db->exec("UPDATE `modal163_userv`.`users` SET `design` = '{$tmpl}' WHERE `users`.`login` = '{$userlogin}'")

Спустя 3 минуты, 10 секунд (16.07.2011 - 06:00) Haotarez написал(а):
Цитата
А то они все в ромбики же

Ну тут все проще значит где-то есть кофликт кодировок, файлы в разных кодировках или прописано неверно в структуре html страницы. Попробуйте в барузере сменить кодировку.

Спустя 4 минуты, 41 секунда (16.07.2011 - 06:05) ModaL написал(а):
Haotarez, прикол в том, что стоит кодировка в одном единственном месте, больше нигде её нет. А в браузере нет смысла менять. Просил знакомых посмотреть и у них тоже самое

Спустя 1 минута, 51 секунда (16.07.2011 - 06:07) Haotarez написал(а):
А в БД тоже все ромбиками? Разгадка тут в том, что указана кодировка utf8 а текст написанный в файле написан в кодировке cp1251. Пересохраните файл скрипта в utf8.

Спустя 2 минуты, 16 секунд (16.07.2011 - 06:09) ModaL написал(а):
Haotarez, неа. В БД всё нормально

Спустя 5 минут, 6 секунд (16.07.2011 - 06:14) Haotarez написал(а):
ModaL
не знаю разрешено ли на этом форуме ссылки в личку отправил 2 ссылки - это один и тотже скрипт но сам файл сохранен в первом случае как cp1251 во втором как utf8

 <?php
header('Content-Type: text/html; charset=utf8');
?>
Проба пера

Спустя 7 минут, 10 секунд (16.07.2011 - 06:21) ModaL написал(а):
Haotarez, хм действительно. Значит явно у меня проблема в коде. Результат отпишу)

Спустя 7 минут, 10 секунд (16.07.2011 - 06:28) ModaL написал(а):
непонятно. В том же файле, если вывести так:

header('Content-Type: text/html; charset=utf8');
require('../system/fn.php');
echo 'Проба пера β';


то всё отлично. А если echo $data[design];, то уже начинается преобразование символа в знак вопроса. А в БД он норм отображается. Ппц

Спустя 1 минута, 43 секунды (16.07.2011 - 06:30) Haotarez написал(а):
Цитата
echo $data[design];

А откуда в переменную попадают данные?

Спустя 33 секунды (16.07.2011 - 06:31) ModaL написал(а):
Haotarez, не понял. Что имеется ввиду?

Спустя 3 минуты, 34 секунды (16.07.2011 - 06:34) Haotarez написал(а):
Ну, это результат выборки из БД или это приходит постом или это явно указанные данные в переменную?

Спустя 2 минуты, 25 секунд (16.07.2011 - 06:37) ModaL написал(а):
результат выборки из БД.

while($data = mysql_fetch_assoc($usersGet)) {
$design = $data['design'];
}

user posted image

Спустя 2 минуты, 38 секунд (16.07.2011 - 06:39) Haotarez написал(а):
данные выводятся в формате cp1251, а приходят в utf8, поэтому вот такой результат..

Спустя 8 минут, 2 секунды (16.07.2011 - 06:47) ModaL написал(а):
как это исправить, помимо PDO?

Спустя 10 минут, 52 секунды (16.07.2011 - 06:58) Haotarez написал(а):
Файл вывода должен иметь кодировку utf8, как сам файл так и его content-type

Спустя 55 минут, 42 секунды (16.07.2011 - 07:54) ModaL написал(а):
Haotarez спасибо огромное за помощь! Всё получилось! Просьба закрыть тему
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.