Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
PHP Кодировка страницы
Здравствуй уважаемый читатель блога LifeExample, кодировка веб страницы это очень интересный зверь, и за частую хищный для начинающих веб мастеров. Я уверен в том, что все новички сталкиваются с проблемой правильного отображения текста на страницах своего сайта. Ты дорогой читатель, наверное встречал в сети интернета ресурсы, на страницах которых отображался не читаемый текст, а кракозябры.
Кракозябрами в среде программирования веб сайтов принято называть символы не соответствующие тем, которые должны быть выведены на страницу. Например, на созданной вами странице должно отображаться приветствие: «Здравствуй читатель моего блога!», а на деле получаете непонятный набор закорючек «Р—РґСЂР°РІСЃС‚РІСѓР№ читатеРСЊ моего Р±РРѕРіР°!» – вот такие закорючки и есть злые КРАКОЗЯБРЫ.
В данной статье мы разберем эту проблему с ног до головы, чтобы больше не возвращаться к танцам с бубном вокруг нечитаемого текста.
И так, чтобы понять откуда появляются подобного рода иероглифы, нам нужно познакомиться с понятием кодировка страницы. Любой текст на компьютере представляется в виде набора байтов, в каждом из этих байтов определенным кодом — закодирован только один единственный символ. Так вот для того чтобы правильно расшифровать или раскодировать набор байтов и представить его в понятном человеку виде, браузеру нужно провести соответствие с одной из кодовых таблиц. Базовой кодировкой является ASCII кодировка, она содержит в себе коды 128 символов латинского алфавита и спец символов вроде скобок и решеток. Именно из ASCII появились первые русскосимвольные кодировки CP866 и KOI8-R, а из них вышла известная сегодняшним вебмастерам кодировка windows-1251. Не смотря на то, что все эти кодировки призваны для отображения русского текста, они все отличаются друг от друга кодами для одинаковых символов. Если текст писался в кодировке CP866, а браузер пытается раскодировать ее с помощью таблицы кодов windows-1251, то в результате мы получим не читаемые слова. Такое часто происходит при отправке сообщений через почтовый сервер.
Приведенные здесь названия кодировок далеко не все что существуют и используются в разных случаях, их намного больше чем вы думаете. С таким обилием кодовых таблиц образовалась проблема совместимости кодировок, и веб мастерам пришлось вставть на борьду с универсализацией кода, что занимало много времени и нервов. На сегодняшний день изобретена панацея для данной проблемы в виде универсальной кодировки utf-8, со временем она вытесняет используемые ранее кодовые таблицы символов, и сейчас уже не для кого не встает вопрос о том в какой кодировке лучше сохранять данные.
Много было сказано относительно эволюции кодировок, и постановке самой задачи, пришло время поговорить о практических моментах.
Существует четыре места на кухне программирования сайта, которые требуют соблюдения единого стандатра кодирования текста.
- Кодировки скриптов.
- Кодировка таблиц MySQL.
- Кодировка самой HTML страницы.
- Локаль используемая браузером пользователя.
Во всех этих составляющих сайта, должна использоваться единая кодировка, какая – решать вам, но я рекомендую utf-8, всетаки она универсальная)
И так теперь подробнее рассмотрим, что нужно сделать для того, чтобы привести к одной кодировке всеперечисленые составляющие.
Кодировки скриптов (шаг 1)
Для того чтобы все скрипты имели одну кодировку, нужно при создании нового скрипта указать желаемую кодировку в настройках вашего редактора. Приведу пример данной процедуры в NotePad++ . При создании нового PHP файла сразу идем в раздел Encoding, он находится в меню, и выбираем Convert to UTF-8 without BOM.
Выбираем именно Convert to UTF-8 without BOM, а не просто Convert to UTF‑8. Приставка without BOM означает то что в первых двух байтах файла будет зашифрована специальная информация о параметре кодировки, в скриптах нам не нужна никакая лишняя информация. В большенстве случаев сохранение с BOM не окажется криминальным, но когданить один из скриптов откажется правильно работать и одной из причин может отазаться именно информация заключенная в первых байтах файла.
Кодировка таблиц MySQL. (шаг 2)
Для того, чтобы узнать какие кодировки используются в ваше MySQL базе, воспользуемся интерфейсом phpMyAdmin. В разделе SQL напишем запрос:
1 | SHOW VARIABLES LIKE 'char%'; |
Выглядеть это должно вот так:
Жмем ОК и получаем информацию о кодировках таблицы
Значения на против character_set_client и character_set_results должны совпадать, так как эти параметры отвечают за кодировку, в которой данные поступают в базу и за кодировку в которой данные берутся из базы.
Если они у вас различаются, то нужно в PHP коде в ручную установить нужную кодировку. Делается это вот такой строчкой:
1 | mysql_query('SET names "utf8"'); |
После этого три переменные character_set_client, character_set_connection и character_set_results примут значение utf8.
Подробнее о том как с помощью PHP работать с базой данных можно прочесть в статье PHP работа с базой данных (Часть 1-3).
Кодировка самой HTML страницы. (Шаг 3)
Теперь данные взятые с базы и данные обрабатываемые в php скрипте, будут совпадать по кодировке, и выводиться в понятном для человека тексте. Но это еще не все, нужно указать кодировку в разделе для мета тегов:
1 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
Либо в cкрипте настроек php командой:
1 | header('Content-Type: text/html; charset= utf-8'); |
Если кодировка HTML будет задана сразу двумя способами, то приоритетным будет задание кодировки из php скрипта.
Также можно глобально задать правило кодировки HTML в файле .htaccess добавив в него строку:
1 | AddDefaultCharset UTF-8 |
Локаль используемая браузером пользователя. (Шаг 4)
Еще одна важная деталь при корректном отображении текста это установка локали:
1 2 | // Кодировка UTF-8 setlocale(LC_ALL, 'Russian_Russia.65001'); |
При установки такой локали, пердставители других стран использующие другую кодовую страницу в своей операционной системе, будут видеть русский текст.
Мы рассмотрели основные моменты возникновения противоречий в кодировках веб страницы, подведем итоги. Для того чтобы ваш рускоязычный сайт был всегда доступен для чтения, необходимо прописать в PHP скрипте настроек такие строки:
1 2 3 4 5 6 7 8 | <?php // Вывод заголовка с данными о кодировке страницы header('Content-Type: text/html; charset=utf-8'); // Настройка локали setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian'); // Настройка подключения к базе данных mysql_query('SET names "utf8"'); ?> |
Если у тебя дорогой читатель остались вопросы по данной статье о PHP кодировке страниц, то смело задавай их в комментариях.
Читайте также похожие статьи:
Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.
Комментарии
Полезная статья, спасибо!
Спасибо большое! Все получилось после «шаг 1»!
Скачал .txt-файл, а там вместо русского текста кракозябры..
Я могу преобразовать эти кракозябры в нормальный читаемый текст?
Смотря какого рода кракозябры. Попробуйте открыть с помощью notepad ++ и конвертировать кодировку в ANSI либо в UTF. Если ничего не получится можете скинуть мне на e-mail файл, я попробую посмотреть.
Подскажите пожалуйста де взять полный перечень с правильным синтаксисом указаний кодировок и локалей (к примеру не для русского, а для украинского языков)?
Смешно было читать статью, и видеть как форма отправки отображает крокозябры в кнопках,
к последнему примеру — так нельзя, надо проверять был ли послан уже заголовок или нет
2
3
header('Content-Type: text/html; charset=utf-8');
}
к последнему примеру – так нельзя, надо проверять был ли послан уже заголовок или нет
1
2
3
if (!headers_sent()) {
header(‘Content-Type: text/html; charset=utf-8’);
}
анонимус
> Смешно было читать статью, и видеть как форма отправки отображает крокозябры в кнопках,
Представляю, насколько смешно. К сожалению мелкие ошибки встречаются у всех.
Спасибо за дополнение.
добрый день.
а у меня такая проблема. я еще учусь на phpadmin.
сделал запрос- параметры сервера совпали с вашими.
проблема такая: создал страницу html где вводится имя
2
3
4
5
<p>Ваше имя: <input type="text" name="name" /></p>
<p>Ваш год рождения: <input type="text" name="age" /></p>
<p><input type="submit" /></p>
</form>
потом в php обработке
2
3
4
5
6
7
8
9
10
11
12
<?php
$a_str = '';
$_str = htmlspecialchars($_POST['name']); //считать имя
if (is_string($a_str))
{ //если строка
echo "Ваше имя: $a_str";
} else {
echo "Имя введено неверно!";
};
?>.<br>
Вам: <?php echo(int)$_POST['age']; ?> лет.<br>
так вот когда ввожу имя на русском то после обработки после слов «ваше имя» пусто, а если латинницей, то отображается. что же делать?
Евгений пока я вижу только одну ошибку:
2
3
4
5
$a_str = '';
$_str = htmlspecialchars($_POST['name']); //считать имя
if (is_string($a_str))
...
Вы присваиваете переменной $a_str пустую строку, а во второй строчке этого кода записываете полученное имя в переменную $_str, но в проверке условия вы все-таки проверяете $a_str.
Если $_str заменить на $a_str, то все заработает.
ну да, тут просто опечатка была. но суть не в этом.
упрощу код, в html вводим свое имя
2
3
4
5
6
7
8
<meta http-equiv="Content-Type" content="text/html; charset=cp1251">
<html> <head> <title>Работа с формами</title> </head>
<body>
<form action="action.php" method="post">
<p>Ваше имя: <input type="text" name="name" /></p>
<p><input type="submit" /></p>
</form> </body></html>
В «action.php»
2
3
4
5
6
7
8
9
10
<meta http-equiv="Content-Type" content="text/html; charset=cp1251">
<html> <head> <title>вывод данных из формы</title></head>
<body>
Ваши регистрационные данные:<br>
<?php
$a_str = htmlspecialchars($_POST['name']); //считать имя
echo "Ваше имя: $a_str"; //просто вывести имя на русском не получается
?>.<br>
</body></html>
нужно просто просто ввести и вывести, когда сервер apach забирает на русском то ничего не выводит
Ваши регистрационные данные:
Ваше имя: .
а при вводе литинскими выводит
Хм, странно у меня все работает, да и по логике все должно работать. Скорее всего загвоздка в настройках сервера.
Можете попробовать прописать кодировку в .htaccess
кажется это делается както — так:
но не уверен что это поможет.
Вот кстати скрипт на котором я тестировал логику работы.
2
3
4
5
6
7
8
9
10
11
12
if(isset($_POST['s'])){
$a_str = htmlspecialchars($_POST['name']); //считать имя
echo "Ваше имя: $a_str"; //просто вывести имя на русском не получается
}
?>
<form action="" method="post">
<p>Ваше имя: <input type="text" name="name" /></p>
<p>Ваш год рождения: <input type="text" name="age" /></p>
<p><input type="submit" name="s" value="проверка"/></p>
</form></code>
у меня возникла такая проблема, когда я открываю в интернете документы допустим «Региональные экзамены и тд» то у меня появляется табличка «Параметры фильтра ASCII» и там нужно указать кодировку, стандартный шрифт, язык и разрыв текста((и когда я указываю, как я думаю, то у меня открывается документ со всякой кракозяброй( Помогите плииз.
Немного не туда вы обратились, но тем неменее если вы опишите проблему подробно, я постараюсь вам помочь. Каким образом вы открываете документы в интернете, и что это за документы?
у меня проблема, все кодировки выставлены в utf-8, но когда читаю имена файлов ,написанных кирилицей в каталогах, то в браузере вижу типа этого �����.txt Как быть? в чём соль?
Попробуйте перед выводом, полученные кирилические названия каталогов перекодировать в UTF-8 функцией iconv()
Марк, можете мне помочь раскодировать текст? Я в этом деле далеко не спец, вообще все непонятно, но очень нужно прочитать письмо, а там буквы-буквицы непонятные. Буду очень признательна!!!
Скиньте свой текст мне на почту, попробую помочь.
Огромное спасибо, очень помогла ваша статья, битый час мучаюсь с кадировками, и причем ведь нажимал в Notepad++ «Преобразовать в UTF-8«, а оказывается просто нужно было нажать «Преобразовать в UTF-8 без BOM«
У меня вот такая проблема, купил сайт. мне его скинули архивом, я распаковал архив, вообщем залил на свой хост, и у меня появились кракозябры, но только контент, а сам загаловок написан нормально. И в админке все нормально, а все добавленные материалы крагозябры.
Испробывал ваши методы чето не помогло.
спасибо за внимание.
Если есть БД, то нужно установить кодировку для нее mysql_query(‘SET names «utf8″‘); Затем проверьте в какой кодировке находятся фалы скриптов, и страниц сайта. Все они должны быть в UTF без BOM. Кроме этого можно явно указать заголовок для вывода контента header(‘Content-Type: text/html; charset= utf-8’);
Обычно, этого достаточно. А вобще если вы не программист, то лучше обратиться к специалисту, сэкономите кучу времени.
Спасибо! Очень помогла статья!
Спасибо за статью, помогла вылечить кодировку… сначала вообще всё было закорючками… я по старой памяти кое-как вылечил кодировку текстов из БД, но потом столкнулся с проблемой кодировки в самих HTML тескстах… подлечил по Вашему методу (8 всё стало как и задумывалось.
Пожалуйста 🙂
Mark такая проблема:
Данная фотка открывается коректно.
А вот эта кракозябрами…
В чём проблеа???Кодировка вся UTF-8 .
Может проблема в расширении .hdr? Обязательно использовать именно это расширение?
Добрый день. Скажите, как поменять кодировку. На сайте стоит windows-1251 — все работает.
Вставляю данные из базы (в которой кодировка UTF-8) вставляю код к подключения mysql_set_charset(‘utf8’,$db);//кодировка бд
получает вот эта бяка:
????????????, ??????? ?????. ??? ? ???????? ??? ????, ??? ??????? ? ???????? ??? ??????. ?????? ??????, ????? ??????????? ????????? ??? ??? ????????? ? ??????????. ???
Пробую изменить кодировку в коде mysql_set_charset(‘utf8’,$db);//кодировка бд еще интересней получается. Как исправить проблему?
А заголовок установили UTF-8 ?
Чтобы проблема исчезла, везде где возможно должна быть указана UTF-8. В базе, в каждой таблице, в заголовке файла, сам файл.
Здравствуйте! Пытаюсь изменить скрипт слайдбанера шаблона на joomla. Хочу поменять слова с английского на русский. А в результате выдает символы �����. Буду очень признателен, если подскажите..)
Отрывок скрипта:
Озонаторы воздуха
for your corporate
Lorem ipsum dolor sit amet, consectetur adipiscing lorem
ipsum dolor sit amet, consectetur adipiscing elit.
Donec blandit enim libero, quis tincidunt arcu.
<img src="templates/template ?>/images/slide1.png» alt=»Bolder Theme, for your corporate site» />
Сохраните файл в соответствующей для вашего проекта кодировке. Попробуйте сделать это xc помощью notepad++ так как описано в статье.
Подскажите, пожалуйста, в чем может быть проблема…
Весь сайт отображается на русском, но вот прикрепленный блок навигации выводится знаками вопросов…Кодировки прописаны (UTF-8.)
Спасибо
Скорее всего не везде кодировки в UTF-8, смотрите внимательно, в каких кодировках находятся скрипты выводящие блог навигации.
Подскажите, пожалуйста, в чем проблема… Сайт полностью отображается на русском, но блок навигации выдает знаки вопросов…(принимает только английский). Кодировки выставлены UTF-8. При смене в файле .htaccess кодировки на windows-1251 сайт отображается крокозяблами, но зато навигация выводится на русском…
Спасибо
А навигация из БД берется? Может надо прописать кодировку для БД.
Спасибо! Помогло! (Из Узбекистана)
Раҳмат, ёрдам берди! (Ўзбекистон)
Здравствуйте! Такой вопрос: в блоге под заголовком поста выводится информация, кто разместил —
Разместил Andrey ��зменить дальше число месяц…
Посмотрел файл single.php там:
ещё строчка есть:
�звините, по Вашему запросу ничего нет
Пожамкались начальные буквы «и»
В comments.php опять же:
�мя
Во всех папках произошли изменения, никак не пойму — с чего мне начать, где исправлять?…
Помогите разобраться — пожалуйста!
Спасибо за статью.Подскажи Марк нужно ли в моем случаи на движке Dle 9.7 перекодировать все файлы с ANSI в utf-8 без bom?
Когда установил движок на локалку (денвер)были кракозябры но после перекодировки в utf-8 без bom файла main и ещё каких то же не помню все стало нормально.
Файлов в движке очень много…
Дайте совет!!!
Главное чтобы все файлы были в одной кодировке либо строго в ANSI либо строго в UTF-8, тоже касается и таблиц в базе. В этом случае проблем не возникнет. А перекодировать файлы какого-либо движка считаю не правильно.
У меня такая проблема захожу на свой сайт а там вот это:
????????????? ??????????? ???????? ?7??? ?????.
Что делать?
И я нуб можете обьяснить русским языком?
Проверьте кодировку во всех местах : mysql, подключаемые файлы. Она должна быть везде одинаковой.
У меня тут есть такая проблемка: я пользуюсь HTML уроками от myrusakov.ru — HTML учебник, я идеально просматриваю уроки по созданию HTML страницы, и внимательно смотрел урок «Установка Локального сервера «Denwer-3». Я всё это дело установил, всё работает, всё проверено. первая HTML страница успешно создана, нет никаких косяков, всё идеал, но когда я проверю написаное дело в браузерной строке, у меня вместо русских букв наблюдаются аЂаЕаЛаЕаКаАаНаАаЛ аЂа?аЂ и т п… Как мне от этого избавится?? Установлена кодировка в HTML странице . Вот меня интересует вопрос, почему не работает русский язык? Я пользуюсь программой NotePad + + — я даже пробывал в меню Кодировки менять на все уже кодировки, меняется из карякулей в карякули, но русский язык я так и не увидел! Помогите пожалуйста! Без этого урока я не могу продолжить дальнейшие уроки.
в фаиле подключения к бд напишите
mysql_query(‘set names utf8’);
mysql_query(‘SET CHARSET utf-8’);
Я понимаю, что такими вопросами уже всех достали, но прощу, не забивайте ногами!
Мальчики, кто поможет мне решить проблему кодировки сайтбаза в американском движке. И скрипт и база в utf8, но запись с сайта отображается в базе кряками, поменяешь в базе текст на киру, а на сайте ?????…Уже столько всего прочитала, голова распухла…видимо без вашей помощи мне это дело не осилить!
Пожалуйста, помогите, буду очень признательна!
Напишите мне на почту!
Изначально стоял тег , но выводились крикозябры, помогло только добавление header(‘Content-Type: text/html; charset= utf-8’);
Спасибо большое!
СпасиБог!
Спасибо.
Все из статьи было применено для правильного вывода кодировки и локали для одного из моих сайтов.
Решение проблемы с скриптом, используемым у меня, было описано мной в моей статье с указанием Вашей статьи и ссылки на Ваш сайт.
Не могли бы рассказать про BOM подробнее?
Дело в том что когда я сохраняю файл на utf 8 без BOM, текст отображается не правильно, а когда с BOM все нормально.
BOM — нужен для UTF-16, UTF-32, например для кодирования иероглифов. Для кодирования кириллицы достаточно UTF-8. Сам по себе BOM — это Byte Order Mark, по посту говоря информация в начале каждого файла определяющая количество байт в текущей UTF кодировке. Не рекомендую использовать UTF с BOM в веб-страницах и скриптах, т.к. невидимая информация, если она есть — выводится на страницу до использования сессий и заголовков приложением, что влечет за собой ошибки скриптов.
Доброго времени! Все файлы php сохраняю UTF-8. Эту кодировку проставил везде где нужно и где нельзя. Выхожу из Notepad, затем опять открываю эти файлы в нём и опппа, кодировка изменилась на ANSI. Что может быть не так??? Спасибо за ранее.
Нужно не просто выбрать кодировку, а преобразовать в нее, для этого есть специальный пункт в разделе «Кодировка», после этого необходимо сохранить файлы.
Здравствуйте. У меня такая проблема.
-все скрипты в utf-8,
-БД — в utf-8;
-html-страницы в win-1251.
html-страниц ооочень много, суть скрипта в том, чтоб открывать эти страницы по пути, прописанному в БД. Естественно, все страницы отображаются крякозяблами.
Менять кодировку в html-страницах- не вариант. как настроить скрипты так, чтоб страницы в браузере отображались в win-1251?
Доброго времени суток. А Вы не знаете, почему может быть вот такая ерунда: когда я ввожу в код php строки, то они выводятся на экран нормально, но стоит обработать их функциями php и они сразу же превращаются в крокозябры. Например если я выведу строку:
то она в таком же виде и будет отображена на экране. Но уже попытка преобразовать строку к нижнему регистру:
Выведет: ��� ����� ����� ������������!
В итоге с функциями творится непонятно что (например, попытка найти первую позиции вхождения в мою строку входит подстроки «мяч»:
, приведёт к выводу числа 7, что абсолютно не соответствует действительности), и я подозреваю, что это из-за этой вот петрушки с кодировками. Потому что если я перехожу на английский регистр, то всё становится нормально. И перевод к нижнему регистру строку не меняет и позиции правильно выдаются!
На сервере у меня настройки такие же, как в Вашем примере. Кодировка в разделе для мета тегов указана: ;
В cкрипте настроек php прописаны команды: header(‘Content-Type: text/html; charset= utf-8’) и setlocale(LC_ALL, ‘Russian_Russia.65001’);;
Подключен файл .htaccess со строкой: AddDefaultCharset utf-8. Ну а к базе данных я в данном скрипте не обращаюсь.
Вы не знаете, почему кодировку меняют функции php и что с этим делать?
Попробуйте так:
ап
Марк, спасибо за статью. Более-менее стало понятно, где нужно проверять кодировки. Но моя проблема, к сожалению, не решилась — пока только учусь работать с базами данных.
У вас написано:
«Значения на против character_set_client и character_set_results должны совпадать.
Если они у вас различаются, то нужно в PHP коде в ручную установить нужную кодировку. Делается это вот такой строчкой:
mysql_query(‘SET names «utf8″‘);»
У меня эти кодировки совпадают.Но если бы не совпадали, то где именно нужно было бы писать эту строчку — в самом выполняемом скрипте PHP? И имеет ли значение ДО подключения к базе, или ПОСЛЕ?
PHP скрипт настроек — это php.ini?
До серверного мне не добраться, можно написать свой в корневой папке?
На домашнем компьютере, на Денвере, скрипт работал правильно, и русские буквы выводились правильно, а после экспорта базы на сервер, вместо русских букв из базы выводятся вопросики. Я нашла только одно отличие: дома в PhpmyAdmin и напротив названия таблицы и во второй строке напротив количества таблиц стояла одна кодировка InnoDB, utf8_general_ci, а на сервере — напротив названия таблицы — InnoDB, utf8_general_ci, а во второй строке — MyISAM, latin1_swedish_ci(по умолчанию).
Может ли это быть причиной? Может я неправильно экспортировала базу?
Очень уж хотелось бы в этом вопросе разобраться раз и навсегда! 🙂 СПАСИБО.
> У меня эти кодировки совпадают.Но если бы не совпадали, то где именно нужно было бы писать эту строчку — в самом выполняемом скрипте PHP? И имеет ли значение ДО подключения к базе, или ПОСЛЕ?
Да, в самом выполняемом скрипте PHP сразу после подключением к БД.
> PHP скрипт настроек — это php.ini?
Верно.
>во второй строке — MyISAM, latin1_swedish_ci
Да, запросто это может быть причиной.
У меня проблема, мучаюсь уже несколько дней. У меня всё в utf-8, и в html заголовке и в php. А на почту приходят вот такие вот:┤п╣п╫п╟ п╟п╫п╨п╣я┌
Спасите пожалуйста
Письма надо слать в кодировке KOI8-R, тогда все будет — ОК.
А как это реализовать?
Помогите пожалуйста всё вроде проверил и только добавил в файл скрипта mysql_query(‘SET names «utf8″‘); вот полный текст скрипта:
<?php
mysql_query('SET names "utf8"');
$resalt = mail("nkosach@list.ru","Анкета с сайта","С сайта была получена анкета с такими данными: \r\nИмя: $_POST[name] \r\nПароль: $_POST[password] \r\nЛюбите ли экономить время: $_POST[time] \r\nСколько часов в день спит: $_POST[sleep] часов \r\nСвои наработки в экономии времени: $_POST[taxt]");
if ($resalt) {
echo "Сообщение отправлено успешно»;
}
else {
echo «Сообщение не отправлено =(«;
}
?>
в результате при запросе к файлу выбивает ошибку:
Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/u246847678/public_html/formdata.PHP on line 3 Warning: mysql_query(): A link to the server could not be established in /home/u246847678/public_html/formdata.PHP on line 3
что делать сделал так но не работает.
Для устранения ошибки, простите курс по работе с базой данных http://lifeexample.ru/php-primeryi-skriptov/php-rabota-s-bazoy-dannyih-chast-1.html
Из приведенного кода непонятно зачем вам устанавливать кодировку для базы, если к ней даже не установлено подключение?
Ясно. Спасибо. Просто я ещё не учил php и MySQL. Этот код показывался как пример в видеоуроке Попова «как привязать код к форме в html» видимо чтоб понять то что описывается в этой статье и исправить ошибку мне нужно выучить php верно?)
Да, знания PHP не помешают)
Очень нужен совет! Взял страницу захвата, редактировал в Notepad++ под себя, закачал на хост. Изображения нормально, текст кракозябры. Помогите,если нужна ссылка на страницу напишу.
Отличная статья, большое спасибо помогла
Здравствуйте. Строчку (‘SET names «utf8″‘); нужно прописывать при каждом новом соединение с базой? Иначе в базу записываются кракозябы. Это нормально, каждый раз прописывать данную строчку или я что-то упускаю?
Спасибо огромное!!!! Ты меня очень выручил!!!
Большое спасибо автору за публикацию. Я нашел для себя нужную информацию и исправил ошибку с кодировкой. «Кракозябры» превратились в нормальные буквы.
Решить проблему удалось созданием пустого файла .htaccess и добавлением в него (единственной) строки AddDefaultCharset UTF-8.
Еще раз большое спасибо!
Доброго времени суток!!!
Вы моя последняя надежда!!!
Просто я в отчаянии!!!
Я новичек. Еще так сказать деревянный чайник))) на пока все получалось. дошла до уроков установки локального сервера (Denwer’a) и работы с обработчиком форм. и вот тут я застряла! в php файле нет ошибок — я проверила 300 раз
в html тоже. при заполнении формы после кнопки «ввод» браузер выводит мне исходный код php файла! я уже кучу статей перечитала, просмотрела миллион туториалов — я не нашла решения.
вот то, что сделала и то, что, собственно, не помогло:
1 перезагружала комп
2 перезапускала Denwer
3 переустанавливала denwer
4 преобразовала в UTF 8 без BOM
5 релактировала файл .htaccess
….
в общем сил моих уже нет(
хочу добавить, что при первых попытках обработать форму у меня получилось, но только один раз, потом все полетело к *…*!
почти уверена, что дело не в коде, а скорее в настройках
подскажите что нужно сделать!!! :*(
Тоже достаточно долго бился с кодировкой, когда простой текстовый файл с кириллицей (.CSV), размещенный на хостинге, браузер «тупо в лоб» отображает корректно, а вот после его же обработки РНР-скриптом кириллица не то что не выводится кракозябрами — она вообще никак не выводится! Т.е. выводится все, кроме кириллицы, на месте которой ПУСТО.
Бился долго и упорно, пока на вашей страничке не обнаружил ЧУДО, к-рое тут же все вылечило — «Выбираем именно Convert to UTF-8 without BOM…». До этого нигде и никогда не встречал такого совета.
СПАСИБО!
Делаю ЧПУ для интернет магазина и всё, в общем, работает, но только пока я использую латинские символы. Попробовал в базе данных дать наименования по-русски, кириллицей, и вместо наименований отделов и категорий получил «0». Не отобразились. Но ведь я же сам, своими глазами, видел эти запросы с кириллицей. Как-то она в адресную строку у людей попадает. Все мои попытки перекодировать кириллицу с помощью стандартных функций к успеху не привели. Не хочет она записываться в ссылку. Закодировано всё в utf8. И даже не представляю себе, с какого конца смотреть начинать. Можно, конечно, транслит использовать, еще какие-то ухищрения, но это все коряво. Как решается проблема? Подскажите, пожалуйста.
Чем заменить
mysql_query(‘SET names «utf8″‘);
???
не хотелось бы выполнять перед каждым запросом к базе
Марк я так понял,что Вы все пишете верно,однако я должен Вас огорчить — есть одна тонкость, а именно две возможности
1 вариант — независимо как настроен сервер мускула в скриптах использовать нужные кодировки.
2 вариант — независимо от скриптов можно настроить сервер мускула на отдачу только одного вида кодировки.
Вот для второго варианта в настройках конфига мускула
пишем эти инструкции
skip-character-set-client-handshake
(эта игнорирует все кодировки от клиента)
character-set-server = utf8
collation-server = utf8_unicode_ci
(эти две позволят серверу все отдавать клиенту в UTF8)
init_connect=‘SET collation_connection = utf8_unicode_ci’
(эта кодирует конект подключения,но не работает под рутом, а под ним конектятся большинство скриптов в корпоративах как к локалхосту)
В общем если сервер настроен как указано выше и совпадает с кодировкой скриптов,то в этом случае кодировки символов и в записях базы мускула и в итогах вводе/выводе скриптов будут идентичны.
Однако не во всех скриптах могут быть изменены кодировки (например шифрованные зендом), в этом случае кодировки сервера и скрипта могут быть не идентичны.
Это я к тому, что в паре РНР-MySql 100% решение совместимости кодировок скриптов и записей базы ПРИНЦИПИАЛЬНО НЕ РЕАЛИЗУЕМА.
Либо Вы настраиваете все на UTF8 и отказываетесь от полезных скриптов с иной кодировкой
Либо Вы не настраиваете сервер только на UTF8, прописываете все что Вы описали для скриптов,но при этом оставляете возможность работы с скриптами в иной кодировке.
Я предпочитаю последний вариант.
А 100% UTF8-ый вариант необходим только в одном случае-когда есть необходимость непосредственного редактирования записи базы данных(ошибки ввода через форму и т.п.),но в серьезных проектах эта возможность исключается обработкой ошибок.Да и на большинстве хостингов кто же Вам позволит изменять кодировки сервера…
У меня настройки такие
Сервер: Localhost via UNIX socket
Тип сервера: MySQL
Версия сервера: 5.6.25-0ubuntu0.15.04.1 — (Ubuntu)
Версия протокола: 10
Пользователь: root@localhost
Кодировка сервера: UTF-8 Unicode (utf8)
И такая конструкция как Вы указали
mysql_query(‘SET names «utf8″‘);
не работает
Работает такая
mysql_query(«SET names ‘utf-8′»);
Борис,правильно будет так :
mysql_query(«SET names utf8»);
Спасибо,совершенно верно — подтверждаю 🙂
Здравствуйте. Помогите разобраться с этой проблемой. При выводе ссылок из базы название принимают вот такой вид:
Заработок в с��ти Зар��боток в сети вввввввввввввввввввввв��вввввввввввв
С выводом английских слов все в норме.
Кодировка файлов в UTF-8 без БОМ, база в UTF-8, таблица где лежат сами ссылки в UTF-8. В самой таблице название ссылок все ОК.
Заранее Спасибо. Сергей.
Здравствуйте! Подскажите мне. Приобрёл скрипт устоновил на хостинг все отлично показывает на русском языке без всяких закорючек и вопросов. Но в графе ;последние 10 ссылок; показывает вот это: Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/wm72181/domains/stop-hamhayp.info/public_html/index.php on line 109
Помогите! Спасибо!