Меню Рубрики

Php перекодировка utf 8 в windows 1251

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

Веб программирование › Изменить кодировку строки PHP

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Функции iconv

Содержание

User Contributed Notes 2 notes

This is edited functions utf8_to_cp1251 and cp1251_to_utf8.
Changes: Check current string encoding.

function cp1251_to_utf8 ( $s )
<
if (( mb_detect_encoding ( $s , ‘UTF-8,CP1251’ )) == «WINDOWS-1251» )
<
$c209 = chr ( 209 ); $c208 = chr ( 208 ); $c129 = chr ( 129 );
for( $i = 0 ; $i strlen ( $s ); $i ++)
<
$c = ord ( $s [ $i ]);
if ( $c >= 192 and $c 239 ) $t .= $c208 . chr ( $c — 48 );
elseif ( $c > 239 ) $t .= $c209 . chr ( $c — 112 );
elseif ( $c == 184 ) $t .= $c209 . $c209 ;
elseif ( $c == 168 ) $t .= $c208 . $c129 ;
else $t .= $s [ $i ];
>
return $t ;
>
else
<
return $s ;
>
>

function utf8_to_cp1251 ( $s )
<
if (( mb_detect_encoding ( $s , ‘UTF-8,CP1251’ )) == «UTF-8» )
<
for ( $c = 0 ; $c strlen ( $s ); $c ++)
<
$i = ord ( $s [ $c ]);
if ( $i 127 ) $out .= $s [ $c ];
if ( $byte2 )
<
$new_c2 =( $c1 & 3 )* 64 +( $i & 63 );
$new_c1 =( $c1 >> 2 )& 5 ;
$new_i = $new_c1 * 256 + $new_c2 ;
if ( $new_i == 1025 )
<
$out_i = 168 ;
> else <
if ( $new_i == 1105 )
<
$out_i = 184 ;
> else <
$out_i = $new_i — 848 ;
>
>
$out .= chr ( $out_i );
$byte2 = false ;
>
if (( $i >> 5 )== 6 )
<
$c1 = $i ;
$byte2 = true ;
>
>
return $out ;
>
else
<
return $s ;
>
>
?>

If you need convert string from Windows-1251 to 866. Some characters of 1251 haven’t representation on DOS 866. For example, long dash — chr(150) will be converted to 0, after that iconv finish his work and other charactes will be skiped. Problem characters range in win1251 (128-159,163,165-167,169,171-174,177-182,187-190).

//$text — input text in windows-1251
//$cout — output text in 866 (cp866, dos ru ascii)

for($i=0;$i =192&&$ord =240&&$ord =128&&$ord

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Php кодировка utf 8 в windows 1251
  • Php для начинающих на windows 10
  • Php в командной строке windows
  • Php xdebug windows 7
  • Php windows удалить файл