Изменить кодировку строки PHP

      Комментарии к записи Изменить кодировку строки PHP отключены

Главная Форумы Программирование Веб программирование Изменить кодировку строки PHP

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 4 мес. назад.

  • Автор
    Сообщения
  • #3701

    Зачастую многие начинающие веб-разработчики борются с каракулями на странице или же при добавлении информации в базу данных («работа с mysql на php«) контент превращается в кучу непонятных символов.

    Если вы здесь, значит и вы пришли на эту страницу ища ответ как изменить кодировку строки на PHP. Ну да ладно, меньше воды, больше дела. Приступим. Для начала нам нужно создать строку или же принять ее с супер глобального массива $_POST. Для этого будет примерно такой код:

    <?php
      $string = $_POST['stroka'];
    ?>

    Теперь когда у нас записана информация в переменной $string, можно изменить кодировку строки. Обычно для этого используется встроенная функция PHP, и называется она iconv.

    Синтаксис функции выглядит примерно так:
    переменная для результата = iconv("текущая кодировка","кодировка в которую конвертируем","конвертируемая строка");

    То-есть если нам надо изменить кодировку строки которая хранится в переменной $string с текущей кодировкой utf-8 на windows-1251, стоит написать всего одну строчку кода, и все будет готово:

    $string=iconv("windows-1251","utf-8",$string);

    Теперь расскажу о решении проблемы с каракулями в базе данных. Здесь тоже нет ничего особенного, всего лишь одна строчка поможет вам. Логика работы такая:

    1. Подключаемся к серверу БД
    2. Выбираем базу данных
    3. Выполняем команду: SET NAMES ‘chcp1251′

    Вся работа как раз и состоит в этой последней строке. Эта команда заставляет работать mysql БД по умолчанию с кодировкой windows-1251, и теперь в таблицу не будут записываться разные каракули 😉

    Для этого нужно написать в PHP такую строку кода:

    mysql_query("SET NAMES 'windows-1251' "); //или
    mysql_query("SET NAMES 'chcp1251' ");

    И последнее о чем хотел рассказать о смене кодировки на PHP. Обычно когда на сервере для передачи данных используют технологию AJAX, скрипт-обработчик работает с кодировкой windows-1251, а как раз JQuery при отправке данных работает с utf-8.

    Поэтому при обработке и дальнейшей отправке ответа клиенту, в браузер выводятся также различные каракули. Для этого нужно при принятии данных на PHP (скриптом-обработчиком) конвертировать весь глобальный массив $_POST в кодировку windows-1251. Вот он, заветный код изменения кодировки POST массива:

    foreach ($_POST as $key => $string) {
      $_POST[$key] = iconv("utf-8", "cp1251", $string);
    }

    Теперь после конвертации кодировки всего POST, у нас не будут больше выводится каракули на страницу пользователям. На этом закончу статью, надеюсь было полезно;)

Для ответа в этой теме необходимо авторизоваться.