Ronder
24.05.2009 - 10:50
Есть форма, которая передаёт данные, введённые от пользователя PHP-скрипту, который заносит эти данные в MySQL.
Кодировка MySQL-базы UTF-8, на всех страницах тоже UTF-8.
HTML |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<form action="result.php" method="post"> Текст: <input size="40" name="text" /><input type="submit" value="go" /> </form>
|
PHP |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<? mysql_connect('localhost', 'root', ''); mysql_select_db('search');
mysql_query("INSERT INTO `peoples` VALUES (NULL, '".$_POST['text']."');");
mysql_close();
|
В итоге, в MySQL попадают данные вида "зддраÑÑÑ".
Подскажите пожалуйста как исправить? Заранее благодарен!
Спустя 12 минут, 34 секунды (24.05.2009 - 10:02) Ronder написал(а):
Проблему решил... В PHP скрипт нужно было добавить строки:
PHP |
mysql_query('SET character_set_database = utf8'); mysql_query('SET NAMES utf8'); |
Только вопрос, зачем? Если по умолчанию у MySQL сервера стоит UTF-8?
Спустя 29 дней, 8 часов, 18 минут, 39 секунд (23.06.2009 - 18:21) live Uucyc написал(а):
у меня все наоборот.
перешел с windows-1251 на utf8. БД также перевел на ютф, но данные по прежнему отображаются вопросиками (???????????). В чем может быть причина?
Спустя 37 минут, 57 секунд (23.06.2009 - 18:59) live Uucyc написал(а):
упс, извиняйте, полистал немного и нашел ответ
Спустя 16 часов, 48 минут, 32 секунды (24.06.2009 - 11:47) live Uucyc написал(а):
возникла новая проблема.
Совместима ли функция strtolower() и ютф8? при использовании этой функции в ютф выводит вопросики, без нее все отлично.
также не работает ucfirst().
Спустя 33 минуты, 5 секунд (24.06.2009 - 12:20) vasa_c написал(а):
Спустя 16 минут, 5 секунд (24.06.2009 - 12:36) live Uucyc написал(а):
Спустя 2 дня, 3 часа, 55 минут, 53 секунды (26.06.2009 - 16:32) live Uucyc написал(а):
указал в начале скрипта
PHP |
setlocale(LC_ALL, "ru_RU.UTF-8"); |
но по прежнему не работают strtolower() и т.п.
Спустя 1 час, 3 минуты, 20 секунд (26.06.2009 - 17:36) twin написал(а):
Локаль это не панацея и достаточно капризная штука. Проще указать кодировку явно
PHP |
$text = mb_strtolower($text, "utf-8"); |
Можно раз и на всегда, для всех, в начале скрипта написать
PHP |
mb_internal_encoding( 'utf-8' ); |
Спустя 5 минут, 25 секунд (26.06.2009 - 17:41) live Uucyc написал(а):
twin, ты спас меня, спасибо
Спустя 1 час, 25 минут, 16 секунд (26.06.2009 - 19:06) live Uucyc написал(а):
рано радовался.
PHP |
mb_internal_encoding( 'utf-8' ); |
почему-то не спасает.
а
PHP |
mb_ucfirst($text, "utf-8") |
я не нашел
Спустя 41 минута, 23 секунды (26.06.2009 - 19:48) live Uucyc написал(а):
опишу подробнее свою проблему.
есть форма регитсрации, а это код обработки
PHP |
if (!empty($_POST['city'])) { $city = ucfirst(mysql_real_escape_string(trim($_POST['city']))); if (!preg_match("/^[a-zA-Zа-яА-Я\.-\s]+$/",$city)) $city_echo = "Недопустимые символы"; } else $city_echo = "Введите название города!"; |
сначала был на 1251, перешел на utf8 и стали проблемы. Уже данный код работает не корректно
Спустя 18 минут, 20 секунд (26.06.2009 - 20:06) twin написал(а):
Ну тут с регуляркой малость напутано:
PHP |
if (!preg_match("/^[a-zа-яё\.-\s]+$/ui",$city)) |
А город как я понял должен быть с большой буквы обязательно... Нет в mb функции mb_ucfirst(). Можно так извернуться:
PHP |
$city = iconv("utf-8","windows-1251",$city); $city = ucfirst($city); $city = iconv("windows-1251","utf-8",$city); |
Спустя 5 минут, 58 секунд (26.06.2009 - 20:12) live Uucyc написал(а):
twin, сейчас попробуем. Надеюсь, что получится
Спустя 7 минут, 58 секунд (26.06.2009 - 20:20) live Uucyc написал(а):

я доволен, благодарю!
_____________