Php iconv не работает

Не работает функция iconv(), а нужно конвертнуть из UTF-8 в windows-1251

Реально очень полезная выручалка, в том случае если никак не получается совладать с кодировкой и локалями на серваке.

а куда ее вставить? я в пхп не силен, у меня на каталоге VirtueMart такая хрень. причем первый раз. раньше как то не было. хз в чем проблема

Не всегда функция strlen() на хостингах включена, встречалась и такая проблема, поэтому еще один вариант, более актуальный:

function utf8_to_win1251($text)
$text=str_replace(«\xD0\xB0″,»а»,$text); $text=str_replace(«\xD0\x90″,»А»,$text);
$text=str_replace(«\xD0\xB1″,»б»,$text); $text=str_replace(«\xD0\x91″,»Б»,$text);
$text=str_replace(«\xD0\xB2″,»в»,$text); $text=str_replace(«\xD0\x92″,»В»,$text);
$text=str_replace(«\xD0\xB3″,»г»,$text); $text=str_replace(«\xD0\x93″,»Г»,$text);
$text=str_replace(«\xD0\xB4″,»д»,$text); $text=str_replace(«\xD0\x94″,»Д»,$text);
$text=str_replace(«\xD0\xB5″,»е»,$text); $text=str_replace(«\xD0\x95″,»Е»,$text);
$text=str_replace(«\xD1\x91″,»ё»,$text); $text=str_replace(«\xD0\x81″,»Ё»,$text);
$text=str_replace(«\xD0\xB6″,»ж»,$text); $text=str_replace(«\xD0\x96″,»Ж»,$text);
$text=str_replace(«\xD0\xB7″,»з»,$text); $text=str_replace(«\xD0\x97″,»З»,$text);
$text=str_replace(«\xD0\xB8″,»и»,$text); $text=str_replace(«\xD0\x98″,»И»,$text);
$text=str_replace(«\xD0\xB9″,»й»,$text); $text=str_replace(«\xD0\x99″,»Й»,$text);
$text=str_replace(«\xD0\xBA»,»к»,$text); $text=str_replace(«\xD0\x9A»,»К»,$text);
$text=str_replace(«\xD0\xBB»,»л»,$text); $text=str_replace(«\xD0\x9B»,»Л»,$text);
$text=str_replace(«\xD0\xBC»,»м»,$text); $text=str_replace(«\xD0\x9C»,»М»,$text);
$text=str_replace(«\xD0\xBD»,»н»,$text); $text=str_replace(«\xD0\x9D»,»Н»,$text);
$text=str_replace(«\xD0\xBE»,»о»,$text); $text=str_replace(«\xD0\x9E»,»О»,$text);
$text=str_replace(«\xD0\xBF»,»п»,$text); $text=str_replace(«\xD0\x9F»,»П»,$text);
$text=str_replace(«\xD1\x80″,»р»,$text); $text=str_replace(«\xD0\xA0″,»Р»,$text);
$text=str_replace(«\xD1\x81″,»с»,$text); $text=str_replace(«\xD0\xA1″,»С»,$text);
$text=str_replace(«\xD1\x82″,»т»,$text); $text=str_replace(«\xD0\xA2″,»Т»,$text);
$text=str_replace(«\xD1\x83″,»у»,$text); $text=str_replace(«\xD0\xA3″,»У»,$text);
$text=str_replace(«\xD1\x84″,»ф»,$text); $text=str_replace(«\xD0\xA4″,»Ф»,$text);
$text=str_replace(«\xD1\x85″,»х»,$text); $text=str_replace(«\xD0\xA5″,»Х»,$text);
$text=str_replace(«\xD1\x86″,»ц»,$text); $text=str_replace(«\xD0\xA6″,»Ц»,$text);
$text=str_replace(«\xD1\x87″,»ч»,$text); $text=str_replace(«\xD0\xA7″,»Ч»,$text);
$text=str_replace(«\xD1\x88″,»ш»,$text); $text=str_replace(«\xD0\xA8″,»Ш»,$text);
$text=str_replace(«\xD1\x89″,»щ»,$text); $text=str_replace(«\xD0\xA9″,»Щ»,$text);
$text=str_replace(«\xD1\x8A»,»ъ»,$text); $text=str_replace(«\xD0\xAA»,»Ъ»,$text);
$text=str_replace(«\xD1\x8B»,»ы»,$text); $text=str_replace(«\xD0\xAB»,»Ы»,$text);
$text=str_replace(«\xD1\x8C»,»ь»,$text); $text=str_replace(«\xD0\xAC»,»Ь»,$text);
$text=str_replace(«\xD1\x8D»,»э»,$text); $text=str_replace(«\xD0\xAD»,»Э»,$text);
$text=str_replace(«\xD1\x8E»,»ю»,$text); $text=str_replace(«\xD0\xAE»,»Ю»,$text);
$text=str_replace(«\xD1\x8F»,»я»,$text); $text=str_replace(«\xD0\xAF»,»Я»,$text);
$text=str_replace(«\xe2\x84\x96″,»№»,$text);
return $text;
>

Источник

Почему iconv не возвращает ничего

Переводя текст из одной кодовой страницы в другую, используя PHP функцию iconv() , можно столкнуться с проблемой — iconv() не возвращает ничего. На самом деле, возвращает, но не ожидаемую строку, а логическое значение false . Почему так происходит и что с этим делать?

Предлагаю рассмотреть описанную проблему на конкретном примере: перекодировка текстовой строки из кодовой страницы UTF-8 в KOI8-R. Это частая задача, с которой сталкиваются разработчики, например, при подготовке текста, полученного из формы обратной связи, для отправки его в виде текста письма по электронной почте.

Читайте также:  Css наследование своих классов

Начиная с версии PHP 5.4, такой код не выведет ничего. Но если посмотреть дамп, то будет видно, что функция iconv() возвращает значение false . А если включен режим вывода сообщений об ошибках, то вы увидите Notice: iconv(): Detected an illegal character in input string in . .

Это происходит в тех случаях, когда конвертируемая строка содержит символы, отсутствующие в целевой кодовой странице. В строке из примера я выделил символы, приводящие к появлению ошибки перекодировки из UTF-8 в кодовую страницу KOI8-R:

« Potato #345 » a simple portrait of an organic Irish spud reportedly sold for 1 million.

До версии PHP 5.4, в случае, если функция iconv() встречала проблемные символы в перекодируемой строке, то она возвращала часть строки до первого найденного символа.

Зная об особенности работы функции iconv() , можно выбрать один из следующих методов решения потенциальной проблемы:

  1. предварительно удалить из перекодируемой строки символы, приводящие к ошибке;
  2. использовать специальные флаги, управляющие работой функции.

Конечно, при желании можно использовать первый метод, но он не универсален, так как придётся учитывать все символы, отсутствующие в целевой кодовой странице. Гораздо удобнее и правильно использовать второй метод.

Функция iconv() поддерживает два флага, добавляемых к указываемой целевой кодовой странице:

  • //TRANSLIT – включает режим транслитерации, выполняющий замену символов, которые не могут быть представлены в целевой кодовой странице, на один или несколько символов, наиболее близких по внешнему виду;
  • //IGNORE – включает режим, удаляющий символы, которые не могут быть представлены в целевой кодовой странице.

Следует учитывать, что работа режима //TRANSLIT зависит от реализации iconv() в системе, поэтому этот режим может работать некорректно или не работать совсем, что приведёт к появлению ошибки. Поэтому надёжнее указывать сразу оба флага:

Результат выполнения функции iconv() с флагами выглядит так:

« Potato #345 » – a simple portrait of an organic Irish spud – reportedly sold for EUR1 million.

Думаю, что теперь у вас не возникнет вопроса о том, что делать и почему “ iconv() не возвращает ничего”.

Другие заметки

Регистронезависимое сравнение строк в Bash

Сравнение строк в Bash не вызывает никаких проблем до тех пор, пока не возникает задача сравнить две строки, не учитывая регистр символов. Я приведу несколько вариантов решения задачи, которые использую сам. Особенностью этих решений является использование только встроенных возможностей оболочки Bash.

Ajax запрос фрагмента страницы с использованием JQuery

Когда возникает потребность в обновлении блоков текущей страницы без её перезагрузки, получая содержимое для этих блоков на других страницах веб-сайта, следует использовать технологию Ajax. Библиотека JQuery значительно упрощает задачу, предоставляя необходимые методы для обработки Ajax запросов.

dimayakovlev.ru © 2023 — Личная территория внутри всемирной паутины

Сайт создан и поддерживается мною с целью сохранения и распространения в свободном доступе опубликованных на нём материалов. Авторство разработок, текстов и изображений, принадлежит мне, если иное не указано отдельно.

При копировании материалов с сайта, не забывайте о важности обратных ссылок.

Размещение обратной индексируемой ссылки показывает интерес к содержанию сайта, что мотивирует к работе над новыми материалами.

Источник

Php iconv не работает

Создание игр на Unreal Engine 5

Создание игр на Unreal Engine 5

Данный курс научит Вас созданию игр на Unreal Engine 5. Курс состоит из 12 модулей, в которых Вы с нуля освоите этот движок и сможете создавать самые разные игры.

В курсе Вы получите всю необходимую теоретическую часть, а также увидите массу практических примеров. Дополнительно, почти к каждому уроку идут упражнения для закрепления материала.

Помимо самого курса Вас ждёт ещё 8 бесплатных ценных Бонусов: «Chaos Destruction», «Разработка 2D-игры», «Динамическая смена дня и ночи», «Создание динамической погоды», «Создание искусственного интеллекта для NPC», «Создание игры под мобильные устройства», «Создание прототипа RPG с открытым миром» и и весь курс «Создание игр на Unreal Engine 4» (актуальный и в 5-й версии), включающий в себя ещё десятки часов видеоуроков.

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube

Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка

Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт

Мой аккаунт Моя группа

Какая тема Вас интересует больше?

Основы Unreal Engine 5

— Вы получите необходимую базу по Unreal Engine 5

— Вы познакомитесь с множеством инструментов в движке

— Вы научитесь создавать несложные игры

Общая продолжительность курса 4 часа, плюс множество упражнений и поддержка!

Чтобы получить Видеокурс,
заполните форму

Этапы создания и продвижения лендинга

Этапы создания и продвижения лендинга

— Вы увидите мои лендинги и их результаты.

— Вы узнаете, какие этапы создания и продвижения у лендингов.

— Вы получите 2 различных пошаговых бизнес-плана, основанных на создании лендингов.

— Вы узнаете, как автоматизировать продвижение: создали лендинг, настроили продвижение, и годами он работает уже без Вас.

Источник

Как исправить ошибку iconv?

Спарсил товары, записываю их в файл.
И в некоторых товарах выдает ошибку.

Notice: iconv(): Detected an illegal character in input string in D:\xampp\htdocs\parser_2\eholoty\index.php on line 103 fputcsv($fp, explode('$', iconv('UTF-8', 'Windows-1251', $line)), ";"); #103 строка

ThunderCat

Во первых — зачем конвертить православный UTF-8 в богомерзкий Windows-1251 в 2019 году?
Во вторых — это не ошибка, а нотис
В третьих — в UTF-8 овердофига символов которые не влазят в 1251, что в итоге и дает такое предупреждение. Если просто вас раздражает нотис который агрится на некий непонятный символ пишите iconv(‘UTF-8’, ‘Windows-1251//IGNORE’, $line)

fputcsv($fp, explode('$', iconv('UTF-8', 'Windows-1251//TRANSLIT', $line)), ";");

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены. В случае отсутствия вышеуказанных параметров будет сгенерирована ошибка уровня E_NOTICE, а функция вернет FALSE.

Источник

Как исправить ошибку iconv?

Спарсил товары, записываю их в файл.
И в некоторых товарах выдает ошибку.

Notice: iconv(): Detected an illegal character in input string in D:\xampp\htdocs\parser_2\eholoty\index.php on line 103 fputcsv($fp, explode('$', iconv('UTF-8', 'Windows-1251', $line)), ";"); #103 строка

ThunderCat

Во первых — зачем конвертить православный UTF-8 в богомерзкий Windows-1251 в 2019 году?
Во вторых — это не ошибка, а нотис
В третьих — в UTF-8 овердофига символов которые не влазят в 1251, что в итоге и дает такое предупреждение. Если просто вас раздражает нотис который агрится на некий непонятный символ пишите iconv(‘UTF-8’, ‘Windows-1251//IGNORE’, $line)

fputcsv($fp, explode('$', iconv('UTF-8', 'Windows-1251//TRANSLIT', $line)), ";");

Если добавить к out_charset строку //TRANSLIT, включается режим транслитерации. Это значит, что в случае, если символ не может быть представлен в требуемой кодировке, он будет заменен на один или несколько наиболее близких по внешнему виду символов. Если добавить строку //IGNORE, то символы, которые не могут быть представлены в требуемой кодировке, будут удалены. В случае отсутствия вышеуказанных параметров будет сгенерирована ошибка уровня E_NOTICE, а функция вернет FALSE.

Источник

Оцените статью