2011-04-20 12 views
8

To jest mój kod PHP:UTF-8 znaków nie są wyświetlane poprawnie

<?php 
$result = ''; 
$str = 'Тугайный соловей'; 
for ($y=0; $y < strlen($str); $y++) { 
    $tmp = mb_substr($str, $y, 1); 
    $result = $result . $tmp; 
} 
echo 'result = ' . $result; 

Wyjście jest:

Тугайный Ñоловей 

Co mogę zrobić? Muszę umieścić $result w bazie danych MySQL.

Odpowiedz

15

Jakie jest kodowanie pliku? Powinien też być UTF8. Jaki jest domyślny zestaw znaków twojego serwera http? Powinien to być również UTF-8.

Kodowanie działa tylko wtedy, gdy:

  • plik jest zakodowany prawidłowo
  • serwer mówi co jest kodowanie dostarczonego pliku.

Podczas pracy z bazami danych, trzeba także ustawić właściwą kodowanie dla swoich dziedzinach DB i sposób klient MySQL komunikuje się z serwerem (patrz mysql_set_charset()). Tylko pola nie wystarczą, ponieważ twój klient MySQL (w tym przypadku PHP) może być domyślnie ustawiony na ISO i ponownie interpretować dane. Więc kończysz z UTF8 DB -> klient ISO -> wstrzyknięty do skryptu PHP UTF8. Nie ma się co dziwić, dlaczego na końcu się to nie udało :-)

Jak wyświetlić plik z prawidłowym zestawem znaków?

header('Content-type: text/html; charset=utf-8') jest jedno rozwiązanie

plik .htaccess zawierający AddDefaultCharset UTF-8 jest kolejnym

HTML meta Content-Type może działać zbyt ale to zawsze lepiej, aby wysłać tę informację przy użyciu nagłówków HTTP.

PS: należy również użyć mb_strlen(), ponieważ strlen() na ciągach UTF8 prawdopodobnie będzie raportować więcej niż rzeczywista długość.

+0

Są 2 rzeczy do sprawdzenia, 1) Czy twój DB UTf-8, 2) Czy twój dokument ma typ UTF-8? – afuzzyllama

+1

Jedna dobra odpowiedź z 5 lol –

+0

@Matthieu tak, smutno ... Myślę, że to dlatego, że większość ludzi pracuje z angielskim i nie martw się o kodowanie ;-) – Capsule

1

Jeśli twoja baza danych to UTF-8, to jest OK dla mysql.

Dla echa, jeśli robisz to na stronie internetowej, umieścić to w górnej stronie:

header('Content-Type: text/html; charset=UTF-8'); 
3

Przypuszczam, kod jest w windiws-1251 ponieważ jest rosyjski :) przekonwertować ciąg UTF-8:

$str = iconv('windows-1251', 'utf-8', $str); 
2

Jeśli masz zamiar wysłać mieszankę danych i nie chcesz, aby określić UTF-8 za pomocą nagłówka php, można dodać ten kod HTML na swojej stronie:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
Powiązane problemy