Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
[ok]
MySQL/UTF-8
читать дальше
upd: решено - данные в базе надо проверять не из консоли, а с помощью php-скрипта, т.к. консоль не всегда может корректно отобразить символы UTF-8.
Спасибо neo_rage.
MySQL/UTF-8
читать дальше
upd: решено - данные в базе надо проверять не из консоли, а с помощью php-скрипта, т.к. консоль не всегда может корректно отобразить символы UTF-8.
Спасибо neo_rage.
-
-
01.04.2012 в 06:28-
-
01.04.2012 в 06:30$i = $_GET['text'];
$link = mysql_connect('localhost', 'root', 'niagara');
if ($link == false)
echo "Ошибка соединения";
else
{
mysql_select_db('test', $link);
mysql_query("insert into one(area) values($i)");
mysql_close($link);
}
?>
-
-
01.04.2012 в 06:35-
-
01.04.2012 в 06:37ещё правильнее вызывать на переданных переменных mysql_real_escape_string, чтобы потом не думать о иньекциях:
$i=mysql_real_escape_string($i);
а потом уже вставлять: mysql_query("insert into one(area) values(\"$i\")"); - этот запрос для мускула будет выглядеть так:
insert into one(area) values("$i").
а int и float приводить явно: $i=(int)$i; и $i=(float)$i; соответственно.
заодно можно почитать про insert...set и update...set, чтобы при редактировании использовать тот же запрос с минимальными поправками.
-
-
01.04.2012 в 07:00<?php
$i = $_GET['text'];
$link = mysql_connect('localhost', 'root', 'niagara');
if ($link == false)
echo "Ошибка соединения";
else
{
$i = mysql_real_escape_string($i);
mysql_select_db('test', $link);
mysql_query("insert into one(area) values(\"$i\")");
mysql_close($link);
}
?>
Кириллицу через скрипт добавляет, но она отображается кракозябрами. Хотя из консоли она всё равно не добавляется.
echo mysql_client_encoding($link); показывает, что соединение установлено в utf8. Отсюда вопрос - где проблема?
-
-
01.04.2012 в 07:04-
-
01.04.2012 в 08:53Это которое ?
-
-
01.04.2012 в 09:17-
-
01.04.2012 в 14:52-
-
01.04.2012 в 14:56ну то есть не надо здесь спрашивать какую гаечку подкрутить, надо понять как всё вместе работает, иначе страшный суд, вечные муки, ад и погибель.
-
-
01.04.2012 в 21:45Мысль почти правильная. Вообще кодировка передаётся в HTTP-заголовках. Выглядит это примерно так:
Content-Type: text/html; charset="utf-8"
Этого не будет в исходном коде страницы никоим образом. Посмотреть можно через Firebug (для FF) или Opera Dragonfly (понятно, для чего) или Web Inspector (для Safari/Chrome). Ну или чем-нибудь трафик посниффать. )
Браузер всегда будет ориентироваться на этот заголовок. Задаётся или настройками сервера (см. мануалы к апачу тому же) или в PHP это можно сделать так:
header('Content-Type: text/html; charset="utf-8"');
Обязательно должно выполняться до любого вывода на страницу (т.к. PHP сразу же пошлёт заголовки при первом же выводе).
Если же заголовка нет и по какой-то причине нет возможности поставить (ну мало ли…), то тогда можно задать прямо в HTML через тег META. Который позволяет сэмулировать отсылку заголовка.
Если же ни того, ни другого нет — кодировка браузеру неизвестна и он волен её выбрать наугад, какая больше ему понравится. )
По поводу форм: хотя этого нет в стандартах, но браузеры соблюдают правило отсылать формы в той же кодировке, в которой была страница.
Есть и маленькое исключение — AJAX-запросы, емнип, всегда будут в UTF-8, хочется этого или нет.
Это то, что касается кодировки в браузере.
-
-
02.04.2012 в 00:12Я тоже в начале про HTTP-заголовки подумал, но меня смутило "neo_rage, так что надо явно прописать в заголовках html и проверить кодировку в самом браузере". Потому и привёл вариант с html.)
Прописал в начале скрипта header('Content-Type: text/html; charset="utf-8"'); Никакого эффекта.
AJAX-запросы, емнип, всегда будут в UTF-8, хочется этого или нет.
О, а вот это полезная инфа. Спасибо. То есть любые данные, которые ajax посылает серверу будут перекодированы в UTF-8 перед отправкой? Необходимо ли, при передаче даннных ajax-запросу, прогонять их через encodeURIComponent() или XmlHttp.setRequestHeader("Content-Type", "text/html; charset=utf-8") будет достаточно? *извиняюсь, если вопросы вообще из разных категорий*
ehlo_kitty, разбирайтесь с самой консолью, нет у вас там никакого юникода.
Что имеется в виду? Что база не в utf8, или что винда отправляет запрос не в utf8?
не надо здесь спрашивать какую гаечку подкрутить, надо понять как всё вместе работает, иначе страшный суд, вечные муки, ад и погибель.
Никто не отрицает полезность фундаментальных знаний, но это приходит со временем. Но есть ситуации, когда этого времени нет и решение нужно уже сейчас. Так что отвечать на вопрос в стиле "сам дурак, учи матчать" не есть лучший способ обучения и помощи, без обид.
-
-
02.04.2012 в 01:11так в браузере какая кодировка стоит? поставьте верную вручную.
-
-
02.04.2012 в 01:41Chrome: Изначально стоит UTF-8. Ни на что поменять не даёт. В базу заносятся кракозябрики.
IE: Изначально стоит UTF-8. Даёт менять кодировку. В базу заносятся кракозябрики.
FireFox: Изначально стоит UTF-8. Даёт менять кодировку. В базу заносятся кракозябрики.
Opera: Изначально стоит UTF-8. Даёт менять кодировку. В базу заносятся кракозябрики.
Базу смотрю из консоли, через select * from tablename;
-
-
02.04.2012 в 01:45ну, посмотрите базу через скрипт, выбрав занесенное.
консоль - не показатель.
-
-
02.04.2012 в 02:01ну, посмотрите базу через скрипт, выбрав занесенное.
консоль - не показатель.
Ага, вот оно. Если выводить через такое вот:
<?php
$link = mysql_connect('localhost', 'root', 'niagara');
if ($link == false)
echo "Ошибка соединения";
else
{
mysql_select_db('test', $link);
$result = mysql_query("select * from one");
while ($row = mysql_fetch_assoc($result))
{
echo $row["id"] . " ";
echo $row["area"] . "
";
}
mysql_close($link);
}
?>
то выводит содержимое таблицы, из которого ясно, что всё это время туда заносились нормальные данные. Хоть с принудительной установкой кодировки, хоть без неё. И русские нормально, и английские.
Приношу свои извинения, что не допёр сразу, проверить с помощью скрипта, а не консольно. Получается, что проблемы то и не было. По крайней мере с данными в таблице.
Значит проблема в том, что консоль винды не умеет отображать кириллические символы UTF-8;
Спасибо за помощь.
-
-
02.04.2012 в 02:02но html и http хидеры все равно ставьте
-
-
02.04.2012 в 02:06То бишь, в страничках прописывать , а в скриптах - header('Content-Type: text/html; charset="utf-8"');. Правильно?
-
-
02.04.2012 в 02:14То бишь, в страничках прописывать , а в скриптах
Правильно — в заголовках. При наличии заголовка тег meta игнорируется.
Но часто пишут и там и там для надёжности — типа, вдруг отвалится конфиг или header() случайно уберут?
консоль винды не умеет отображать кириллические символы UTF-8
Так на скриншоте так-то вообще cp866.
То есть любые данные, которые ajax посылает серверу будут перекодированы в UTF-8 перед отправкой?
Я честно скажу, что не помню, как оно должно быть и можно ли это изменить (нагуглить по-быстрому тоже не удалось), но по умолчанию — это точно так и я сталкивался с этой проблемой когда-то давно, когда страница была в 1251. ) Никаких специальных действий не надо, оно само.
-
-
02.04.2012 в 02:16-
-
02.04.2012 в 02:29*блин, забыл что meta здесь не отображается ^^"*
То есть, если страничка, то я в ней обязательно указываю:
1) кодировку в теге html (это ж вроде заголовок, или нет?)
2) дублирую указание кодировки в теге meta.
Если скрипт, то я в начале скрипта указываю:
1) header('Content-Type: text/html; charset="utf-8"');
Так?
neo_rage, Спасибо!
-
-
02.04.2012 в 03:00Ладно, ещё раз. )
И кодировка и тип данных содержимого указывается в HTTP-заголовках. )) В частности, заголовок может формироваться веб-сервером самостоятельно для данного типа файла. Или, тоже в частности, в PHP HTTP-заголовки можно задать функцией header().
Если кодировка НЕ указана в заголовке, то браузер смотрит, нет ли этого в содержимом — т.е. в отданном HTML. И если видит там тег META с Content-Type, то прекращает разбор страницы и начинает заново с указанной там кодировкой.
кодировку в теге html (это ж вроде заголовок, или нет?)
Неа, речь шла про HTTP-заголовки.
Я вообще рекомендую для понимания сути открыть отладчик в браузере и посмотреть, как реально происходит обмен данными между веб-сервером и браузером.
Пример также можно найти в вики: en.wikipedia.org/wiki/Hypertext_Transfer_Protoc...
-
-
02.04.2012 в 03:02решение чего вам нужно сейчас? что вам захотелось найти в вебдеве? что это для вас: работа, хобби, минутная прихоть? энивейс тут не обучают, обучаются всегда самостоятельно, а помощь вам вот оказали, а зря, потому что вы же ничего не поняли.
-
-
02.04.2012 в 05:51-
-
02.04.2012 в 05:54-
-
02.04.2012 в 06:01-
-
02.04.2012 в 06:39