Кодировка PHP от ISO-8859-1 до UTF-8 - PullRequest
0 голосов
/ 27 июня 2011
<?php
mb_internal_encoding('UTF-8');
mb_language('uni');
$a=file_get_contents("http://www.ciao.de/Erfahrungsberichte/8x4_Wild_Flower_Deo_Spray__8937431");
preg_match('/dass auf dem Versch(.*)ziehen mich/Us',$a,$b);
$b=$b[1];
echo $b."\n";
echo utf8_encode($b)."\n";
echo mb_convert_encoding($b,'UTF-8','iso-8859-1')."\n";

приводит к

lussdeckel riesengro▒ und un▒bersehbar glitzernd ein ▒New▒ prangt. Neue Produkte
lussdeckel riesengroß und unübersehbar glitzernd ein �New� prangt. Neue Produkte
lussdeckel riesengroß und unübersehbar glitzernd ein �New� prangt. Neue Produkte

Исходный код HTTP предлагает в метатеге использовать "iso-8859-1".С немецкими умлаутами все в порядке, но почему кавычки вокруг "New" не конвертируются правильно?В PHP manual есть функция fix_latin.При использовании этой функции кавычки также правильно конвертируются!?

PS: то же самое происходит с символом европейской валюты € (EUR) - он также конвертируется неправильно (кроме функции fix_latin), но почему?

1 Ответ

2 голосов
/ 27 июня 2011

Знак евро не соответствует ISO-8859-1. (ISO-8859-15 был создан для этой цели.)

Насколько я помню, mb_convert_encoding() не будет транслитерировать символы. Попробуйте вместо этого использовать iconv(). И / или обязательно установите заголовок content-type при необходимости.

В следующей версии PHP также будет Класс транслитератора , который обертывает ICU.

...