Кодировка символов и экранирование символов
Кодировка символов должна быть чётко определена, поскольку влияет на каждое действие, в том числе на действия с последствиями для безопасности. Например, механизмы экранирования (такие как mysqli_real_escape_string() для mysqli и PDO::quote() для PDO_MySQL) зависят от этих настроек. Важно понимать, что эти функции не используют кодировку символов определённую в запросе, так например, следующие запросы не будут влиять на поведение этих функций:
Пример #1 Проблемы установки кодировки символов с помощью SQL
$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );
// Этот запрос не влияет на поведение $mysqli->real_escape_string();
$mysqli -> query ( «SET NAMES utf8mb4» );
// И этот не влияет на $mysqli->real_escape_string();
$mysqli -> query ( «SET CHARACTER SET utf8mb4» );
// но вот этот запрос повлияет на поведение $mysqli->real_escape_string();
$mysqli -> set_charset ( ‘utf8mb4’ );
// а этот НЕ повлияет, потому что нельзя использовать «-»
$mysqli -> set_charset ( ‘UTF-8’ ); // (utf8mb4, а не UTF-8)
?>
Примеры ниже демонстрируют, как правильно изменять кодировку символов во время выполнения, используя каждый из API.
Замечание: Возможная путаница с UTF-8
Поскольку имена кодировок символов в MySQL не содержат тире/дефис, строка «utf8» применяется в MySQL для установки кодировки UTF-8 (до 3 байт в кодировке Unicode UTF-8). Строка «UTF-8» неприемлема и выбросит ошибку при установке кодировки символов.
Пример #2 Пример установки кодировки символов: mysqli
$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );
?php
echo ‘Первоначальная кодировка: ‘ . $mysqli -> character_set_name () . «\n» ;
if (! $mysqli -> set_charset ( ‘utf8mb4’ )) printf ( «Ошибка загрузки кодировки utf8mb4: %s\n» , $mysqli -> error );
exit;
>
echo ‘Ваша текущая кодировка: ‘ . $mysqli -> character_set_name () . «\n» ;
?>
Пример #3 Пример установки кодировки символов: pdo_mysql
Как сменить кодировку php документа c windows-1251 на utf-8?
Здравствуйте!
Как сменить кодировку php документа c windows-1251 на utf-8?
Простое переименование $config[‘charset’] = «windows-1251»; и ему подобных не помогает.
- Вопрос задан более трёх лет назад
- 13649 просмотров
Комментировать
Решения вопроса 1
В редакторе где вы сделали документ выберите другую кодировку и всё
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 2
используйте
header(«Content-Type: text/html; charset=utf-8»);
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Сменить кодировку php документа, можно так-же как и любого другого текстового файла.
Например в notepad++ уже существующий файл достаточно лишь «переконвертировать» в правильную кодировку -> menu -> encoding -> Convert to UTF-8 without BOM.
А если у Вас новый файл, тогда выберите menu -> encoding -> encode in UTF-8 without bom.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- PHP
- +1 ещё
Как из разных word документов собрать все таблицы (средствами PHPOffice/PHPWord) с заданным названием и сохранить в один файл?
- 1 подписчик
- 40 минут назад
- 21 просмотр
Проблема с кодировкой сайта

Каждый web-разработчик хотябы раз в своей жизни, а то и стопятсот раз сталкивался с проблемой неправильной кодировки сайта (например, когда вместо русских букв вы видите кракозябры). А если выразиться более корректно, то с проблемой «расхождения» кодировок на сайте. Ибо если везде указана одна и та же кодировка, то проблем с ней возникнуть не может! Итак, давайте попробуем разобраться, в каких местах нам надо настроить (указать) кодировку для сайта:
- Перекодировать сам файл, отвечающий за web-страницу
- Перекодировать все подключаемые к нему файлы
- Указать кодировку в файле httpd.conf
- Указать кодировку в файле .htaccess
- Указать кодировку Базы данных
Самое главное — это соблюсти одно условие: во всех вышеперечисленных местах кодировка должна быть одинаковой. Если это utf-8, то везде, во всех пяти местах, это должна быть именно utf-8. Иначе рано или поздно вы будете сталкиваться с проблемой кодировок и тратить на это по парочке часов драгоценного времени.
1. Как перекодировать файл, отвечающий за web-страницу?
Для того чтобы узнать текущую кодировку файла, вы можете открыть его в Notepad++, зайти в пунк «Encoding» и там будет выбрана текущая кодировка файла. Для того чтобы её сменить, например, на UTF-8, выберите в этом же меню «Convert to UTF-8 without BOOM».
2. Как перекодировать подключаемые файлы?
Иногда бывает так, что в файле с правильной кодировкой подключается файл с совершенно другой кодировкой, из-за чего возникают проблемы. Например, файл может подключаться так:
Поступите с подключаемыми файлами так, как написано в пункте 1.
3. Как указать кодировку в файле httpd.conf?
Файл httpd.conf содержит глобальные инструкции для сервера. Обычно он расположен по пути «/usr/local/apache/conf/», также вы можете его найти поиском. Если в нем изменить кодировку по умолчанию, то она поменяется для всех сайтов, расположенных на этом сервере. Будьте аккуратны!
Чтобы сменить кодировку, найдите в файле httpd.conf строчку «AddDefaultCharset windows-1251» и замените на «AddDefaultCharset utf-8».
Кстати, если вы пользуетесь виртуальным платным сервером, то скорее всего, у вас не будет доступа к этому файлу. Но следующий пункт вам поможет.
4. Как указать кодировку в файле .htaccess?
В корневой директории вашего сайта скорее всего уже есть, а если нету, то можно создать файл .htaccess. Да-да, это файл без имени, только с расширением. Он отвечает за настройки апача для конкретного сайта. Для того чтобы в нем прописать кодировку сайта, необходимо найти и подправить (или добавить) вот такую строку: «AddDefaultCharset UTF-8».
5. Как указать кодировку Базы данных?
Есть такие люди, которые проблему несоответствия кодировок файлов и БД решают, например, так:
Ну и существует еще порядка 10 способов на лету (при извлечении, при записи) перекодировать данные. Но понятно же, что когда-нибудь это не сработает: просто в кодировке windows-1251 не окажется нужного символа.
Так что когда создаете БД, то выбирайте сразу же правильную кодировку: «UTF-8 general ci». Либо можно попробовать сменить кодировку в Базе данных:
Ах да! Не забудьте, что в базе данных у каждой таблицы есть своя кодировка. И если на момент смены кодировки у самой БД уже были созданы какие-то таблицы, то им также придется вручную сменить кодировку:
Ну и еще вас немного огорчу. У колонок таблицы тоже есть своя кодировка =) И если таблица на момент перекодирования БД была уже создана, то эту кодировку также придется сменить:
Конец
Ну вот, надеюсь, что после прочтения этой статьи вы поняли, что кодировка может задаваться не только в самом файле, но и еще в куче разных мест. Дерзайте, друзья, и используйте везде кодировку UTF-8, ибо её поддерживают сейчас все разработчики, и она поддерживает все известные и неизвестные вам символы 😉
Понравилась или помогла статья? Самое лучшее, что ты можешь сделать — это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься — это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!
Как конвертировать сайт на «Битрикс» из cp1251 в UTF-8
Издержки свободы выбора. За те годы, пока преимущества формата UTF-8 сделались очевидны большинству разработчиков и многим заказчикам, были произведены многие тысячи сайтов в кодировке cp1251. Со временем их владельцы приходят к пониманию выгод использования UTF-8 и принимают решение сменить кодировку материалов сайта. Как это сделать на практике?
1. Подготовка
Конвертацию выполняет модуль mbstring. Для его работы необходимо установить параметр
Если вы используете для хостинга VPS-сервер, то параметр легко настроить в php.ini. Если нет, то ситуация усложняется. Будьте особо внимательны: с версии php 5.2.8 параметр меняется глобально на весь сервер. Обратитесь к хостеру, но не соглашайтесь на использование CGI.
Сделайте реззервную копию сайта и выполняйте конвертацию именно на ней. В случае неудачи данные основного сайта не пострадают.
2. Задание параметров конвертации
Задайте язык сайта, формат даты и кодировку.
3. Настройте dbconn.php
В файле в /bitrix/php_interface/dbconn.php добавьте строку
4. Настройте кодировку сайта
В настройках сайта смените кодировку с windows-1251 на utf-8.
5. Настройте кодировку языка
В настройках языка смените кодировку с windows-1251 на utf-8.
6. Конвертируйте файлы в utf-8
7. Конвертируйте ьазу данных в utf-8
8. Отредактируйте файл after_connect.php
В файле /bitrix/php_interface/after_connect.php найдите строку
$DB->Query(«SET NAMES ‘cp1251′»
И замените на строку
$DB->Query(«SET NAMES ‘utf8′»
9. Очистите кэш всего сайта
10. Выйдите из сеанса работы с панелью управления, закройте браузер, потом откройте его и снова зайдите на сайт.
Обратите внимание: если конвертируете файлы в utf-8 вручную, не сохраняйте специальную последовательность BOM.
