Делаем запрос на php в БД и вносим туда текст с символом β: "Привет, как дела? β", но почему то эти символы заменяются на знак вопроса.
Кодировка страницы установлена следующая:
header('Content-Type: text/html; charset=windows-1251');
если поставить utf8, то всё будет в ромбиках.
и запрос естественно на кодировку:
mysql_query("SET NAMES utf8");
Собственно хотел узнать, в чём проблема?
Спустя 16 минут, 40 секунд (15.07.2011 - 23:21) kovaldm написал(а):
Таблица в какой кодировке?
Спустя 3 часа, 29 минут, 32 секунды (16.07.2011 - 02:50) ModaL написал(а):
kovaldm, utf8-bin
Спустя 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, много раз пробывал. всё неудачно.
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? Его можно несложно заменить чем-то вроде β, или β - это принципиально?
Если я правильно понял данный символ вы используете в качестве delimeter? Его можно несложно заменить чем-то вроде β, или β - это принципиально?
Спустя 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']); распознаёт символ.
Это при header('Content-Type: text/html; charset=utf8');, но постит знак вопроса
Тогда
Это при header('Content-Type: text/html; charset=utf8');, но постит знак вопроса
Тогда
Спустя 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 инъекций и освобождает от конструкций предварительной обработки "магических символов". Позволяет препарировать запросы что тоже порой очень удобно.
Почитайте в вики, очень удобная штука, которая помимо прочего защищает от примитивных SQL инъекций и освобождает от конструкций предварительной обработки "магических символов". Позволяет препарировать запросы что тоже порой очень удобно.
Спустя 5 минут, 21 секунда (16.07.2011 - 05:40) ModaL написал(а):
Haotarez, ничерта не понял как работает.
что я тут наляпал? :o
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 включено.
Ошибка:
Такая ошибка может возникнуть в результате опечатки, при использовании лишних кавычек в коде для параметров host и/или dbname. Следующий код приведет к подобной ошибке:
Тут с кавычками трабл теперь:
Ошибка:
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
не знаю разрешено ли на этом форуме ссылки в личку отправил 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 написал(а):
непонятно. В том же файле, если вывести так:
то всё отлично. А если echo $data[design];, то уже начинается преобразование символа в знак вопроса. А в БД он норм отображается. Ппц
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'];
}
while($data = mysql_fetch_assoc($usersGet)) {
$design = $data['design'];
}
Спустя 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 спасибо огромное за помощь! Всё получилось! Просьба закрыть тему