Одна проблема при переключении между кодировками состоит в том, что даже при транслитерации не все символы представляются в других кодировках в одном байте.
Например, рассмотрим ЕВРОЗНАК , aсимвол, который занимает 3 байта при кодировании в UTF-8.Если вы посмотрите на страницу поддержки кодировки , то увидите, что ISO-8859-2 не указан в списке.
Поскольку нет ни одного символа, представляющего знак евро, тогда транслитерация делаетлучше всего по-прежнему представлять его в выходных данных
echo iconv( 'UTF-8', 'ISO-8859-2//TRANSLIT', '€' ); // EUR
В этом примере мы по-прежнему имеем 3 байта для представления знака евро после транслитерации.
РЕДАКТИРОВАТЬ
PS Ошибка уровня NOTICE, которую вы получаете, заключается в том, что вы выполнили iconv () без флага транслитерации.И, как я подчеркнул выше, ЗНАК ЕВРО не существует в ISO-8859-2, поэтому у вас явно есть хотя бы один символ в ваших данных, которого также нет в ISO-8859-2, так что вы будете иметь для использования транслитерации.Просто знайте, что это не гарантирует, что вы получите до 1 байта / символ.