Антон С.
15 сообщений
#14 лет назад
Здравствуйте!

Занимаюсь написанием парсера, который должен брать данные в кодировке ISO-8859-1 и записовать в БД в кодировке UTF-8

Пользуюсь стандартным iconv("ISO-8859-1", "UTF-8", $text); Проблема возникает на символах, код которых, как я понимаю, превышает допустимый лимит UTF-8 в 8 бит. (например € - знак евро или же — - длинное тире).
При попадании таких символов после перевода UTF-8 на месте этих символов ставит неизвесный ему (тот самый ненависный знак вопроса на чёрном фоне либо просто символ с нулевой шириной, будто бы и нету там ничего и нету - зависит от способа вывода на экран)
Я пробовал делать замену проблемных символов до перевода кодировки, но что-то не вышло...

Посоветуйте, как подружить эти две кодировки?
Роман Беляев
16382 сообщения
#14 лет назад
Поставить в конечной кодировке UTF-8//IGNORE ? Может быть слэши в другую сторону надо.

А еще вот яндекс подсказывает на первой странице
Антон С.
15 сообщений
#14 лет назад
Всё осталось прежним =(
Александр В.
58 сообщений
#14 лет назад
А если попробывать mb_string - в моей практике он оказался реально лучше iconv...
Антон С.
15 сообщений
#14 лет назад
shandy, пробовал $text= mb_convert_encoding($text, "UTF-8", "ISO-8859-1"; - не пошло

В данный момент юзаю ужасный и медленный костыль

function replace_utf_badchars ($string){

$len = strlen($string);

for($i = 0; $i < $len; $i++){
$c = ord($string);
// echo $c."<br>";
switch ($c) {
case 146:
$string = str_replace($string, "'",$string);
break;
case 145:
$string = str_replace($string, "'",$string);
break;
case 150:
$string = str_replace($string, "&mdash;",$string);
break;
case 128:
$string = str_replace($string, "&euro;",$string);
break;
case 163:
$string = str_replace($string, "&pound;",$string);
break;
}
}
return $string;

}