Неочевидное поведение некоторых функций в php раздражает. Это ведет к ошибкам и заставляет разработчика запоминать массу ненужной информации.
1 |
$str = iconv('utf-8', 'windows-1251//IGNORE', $str); |
От этой строки ожидаешь, что iconv будет пропускать, то что не может распознать. Однако функция выбрасывает нотис и обрывает конвертацию там где встретила "нецензурный" символ.
1 |
Detected an illegal character in input string in |
Самое неприятное, что эта ошибка может долго не проявляться. Скрипт генерациии yml файла для Яндекс-Маркета отработал год, прежде чем возникла эта ошибка. Чуть лучше решение с //TRANSLIT но это не всегда удобно.
1 |
$str = iconv('utf-8', 'windows-1251//TRANSLIT', $str); |
Транслит пытается найти аналог символу, например меняя № на No, что в случае артикула мешает. Более удачное решение, использование мультибайтовых функций mb_*
1 |
$str = mb_convert_encoding($str, "windows-1251", "utf-8"); |
А вообще от кодировки cp1251 стоит избавляться. Большинство IDE сейчас по умолчанию работают с UTF-8, т.е. разработка ведется в этой кодировке. В базе хранить данные в другой кодировке смысла нет. В случае того же yml для Яндекс.Маркета в мануале указан неудачный пример.
1 2 |
<?xml version="1.0" encoding="windows-1251"?> <!DOCTYPE yml_catalog SYSTEM "shops.dtd"> |
И в результате все разработчики наступают на одни и те же грабли, хотя ничто не мешает сформировать yml в кодировке utf-8
Свежие комментарии