PHP iconv - кодировка из utf-8 windows-1251

При помощи функции php iconv (строго говоря, это не совсем функция PHP, она использует стороннюю библиотеку (есть iconv.dll и php_iconv.dll или iconv.so), которой может не быть на хостинге) легко преобразовать кодировку (например, из windows-1251 в utf-8 и наоборот:

$s = iconv( "cp1251","UTF-8", $s);
$s = iconv("UTF-8", "windows-1251", $s);


Однако, если не работает iconv на хостинге, а преобразовать текст из одной кодировки в другую необходимо, можно воспользоваться сторонними функциями (на самом деле, встречал несколько вариантов - какой из них лучше.. или точнее “более рабочий” - не скажу).

Про преобразование UFT-8 сущностей я уже писал ранее , однако иногда требуется наоборот перевести текст из cp1251 в utf-8 - например.

Если не работает iconv

function iconv ($in_charset, $out_charset, $str) string - для преобразования из Windows в UTF-8 выполняем один из вызовов
iconv( "cp1251","UTF-8", $s);
iconv( "windows-1251","UTF-8", $s);

выдаёт пустую строку (если в $s нет английских символов - они в любой кодировке отображаются одинаково) на некоторых хостингах можно попробовать использовать функцию mb_convert_encoding - у неё другой порядок аргументов!
function mb_convert_encoding ($str, $to_encoding, $from_encoding = null) string

Т.е. чтобы преобразовать текст из кодировки windows-1251 в UTF-8 следует выполнить:
mb_convert_encoding($s,"UTF-8","windows-1251");

iconv array для массива

В некоторых ситуациях преобразовать одномерный или многомерный массив из одной кодировки в другую (например, из utf8 в windows-1251) с сохранением ключей массива. Для решения, можно использовать несколько способов.
// если не требуется сохранять предыдущий массив, для экономии
// передаем его по ссылке, происходит замена внутри
function utf8to1251(&$text) {
$text = iconv("utf-8", "windows-1251", $text); //without return
}
array_walk_recursive($array, "utf8to1251");

Или, если требуется оставить исходный массив без изменений - можно воспользоваться:
$newArray = array_map(create_function('$v', 'return iconv("utf-8", "windows-1251", $v);'), $oldArray);

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (2) к записи “PHP iconv - кодировка из utf-8 windows-1251”

  1. Василий сообщает :

    Как быть с запросом select к базе mssql не понимает кирилицу
    “select
    [Название]
    ,[номер]
    , [Removed]
    from imdb.dbo. Оконечное оборудование “;

  2. levik сообщает :

    Следует привести столбцы (или всю базу данных сразу) к соответствующему сравнению (кодировке)
    ALTER DATABASE COLLATE Cyrillic_General_CI_AS

    Или использовать Nvarchar

    declare @test TABLE
    (
    Col1 varchar(40),
    Col2 varchar(40),
    Col3 nvarchar(40),
    Col4 nvarchar(40)
    )
    INSERT INTO @test VALUES
    ('иытание',N'иытание','иытание',N'иытание')
    SELECT * FROM @test

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