2012-11-22 21 views

Odpowiedz

10

Istnieje kilka rzeczy, które trzeba wziąć pod uwagę:

  1. Sprawdź, czy dane w DB są przechowywane jako UTF-8
  2. Sprawdź, czy połączenie klienta do DB jest w UTF-8 (dla przykład, w mysql patrz: http://www.php.net/manual/en/mysqli.character-set-name.php)
  3. Upewnij się, że strona ma ustawiony typ zawartości jako UTF-8 [możesz użyć nagłówka ("Content-Type: utf-8"); ]
  4. Spróbuj ustawić wewnętrzne kodowanie, używając mb_internal_encoding ("UTF-8");

HTH

+0

+1 za wspomnienie kodowania DB i' mb_internal_encoding' –

+0

... i jak wspomniano w dwóch pozostałych odpowiedziach powinieneś używać 'mb_substr' –

+0

mb_internal_encoding ("UTF-8"); - Działa w porządku! dzięki! –

21
$first_char = mb_substr($title, 0, 1); 

Trzeba użyć wielobajtowych funkcje ciąg PHP prawidłowo obsługiwać ciągi Unicode:

http://www.php.net/manual/en/ref.mbstring.php

http://www.php.net/manual/en/function.mb-substr.php

Będziesz musiał określić kodowanie znaków w <head> twojego HTML:

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

czyli

<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" /> 
+2

echo mb_substr ($ tytuł, 0, 1); Wynik: –

+0

mb_substr nie pomaga –

+0

Czy możesz opublikować tutaj cały ciąg? –

4

PHP struny nie rozumie wielobajtowe ciągi domyślnie array jak indeksowania będzie posiekać pierwszego bajta, a jeśli tak się stało, aby nie być w zakresie ASCII można uzyskać ten wynik.

Użyj metody mb_substr.

8

Jak wcześniej wspomniano w innych pytań, PHP, gdy próbuje uzyskać podciąg, że nie rozumie znaków wielobajtowych (jak masz z UTF8 na przykład).

Jakie inne odpowiedzi nie wspomnieć, że należy schować kodowanie chcesz użyć do mb_substr

Tak więc, na przykład, używam to:

mb_substr("Sunday", 0, 1,'UTF8'); // Returns S 
mb_substr("воскресенье", 0, 1,'UTF8'); // Returns в 
+0

Nie działa dla mnie bez parametru "UTF8". Dzięki! – PiTheNumber

Powiązane problemy