2010-07-20 2 views
4

В настоящее время мой сайт поддерживает английский, португальский, шведский и польский. Но по какой-то причине некоторые польские символы не показывают право, как Zal�z konto он должен выглядеть как этот Zalóz kontoпольские символы utf8 dont show right

Я это

// Send the Content-type header in case the web server is setup to send something else 
header('Content-type: text/html; charset=utf-8'); 

и внутри <head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
+3

От где вы получите польские тексты? Если из базы данных вам нужно установить также кодировку базы данных после функции mysql_connect. – antyrat

+1

Откуда берутся ваши данные? База данных? Убедитесь, что для соединения установлено значение UTF-8 (SET NAMES для MySQL). Hard-код? Убедитесь, что вы сохранили файл с кодировкой UTF-8. – igorw

+0

спасибо! я сохранил файл с utf8 – Remy

ответ

2

если вы извлечь данные из MySQL базы данных с php, вы должны использовать этот запрос, прежде чем что-либо делать.

mysql_query("SET NAMES utf8");

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

4

Вам нужно преобразовать строку в UTF8 также.

utf8_encode() не проверяет, в какую кодировку помещалась ваша строка, и иногда это дает вам испорченную строку, поэтому я сделал функцию под названием Encoding :: toUTF8(), чтобы сделать это правильно.

Вам не нужно знать, что такое кодировка ваших строк. Это может быть Latin1 (iso 8859-1), Windows-1252 или UTF8, или строка может содержать их. Кодирование :: toUTF8() преобразует все в UTF8.

Я сделал это, потому что служба давала мне поток данных, все испорченные, смешивая эти кодировки в одной строке.

Использование:

$utf8_string = Encoding::toUTF8($mixed_string); 

$latin1_string = Encoding::toLatin1($mixed_string); 

Я включил еще одну функцию кодирования :: fixUTF8(), которым будет фиксировать каждую строку UTF8, которая выглядит искаженным продукт того, закодированы в UTF8 несколько раз.

Использование:

$utf8_string = Encoding::fixUTF8($garbled_utf8_string); 

Примеры:

echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 
echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football"); 
echo Encoding::fixUTF8("Fédération Camerounaise de Football"); 

Выведет:

Fédération Camerounaise de Football 
Fédération Camerounaise de Football 
Fédération Camerounaise de Football 
Fédération Camerounaise de Football 

Скачать:

http://dl.dropbox.com/u/186012/PHP/forceUTF8.zip

+0

, это должно быть отмечено – RCNeil

1

В качестве альтернативы вы можете использовать стандарт iso-8859-1:

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />