otrzymuję ciąg UTF-8 z DB i próbuje powtórzyć swój pierwszy znak:Get pierwszego znaku łańcucha znaków UTF-8
$ title = $ model-> tytułowy; echo $ title [0];
Otrzymuję:
Co jest nie tak? Dzięki!
otrzymuję ciąg UTF-8 z DB i próbuje powtórzyć swój pierwszy znak:Get pierwszego znaku łańcucha znaków UTF-8
$ title = $ model-> tytułowy; echo $ title [0];
Otrzymuję:
Co jest nie tak? Dzięki!
Istnieje kilka rzeczy, które trzeba wziąć pod uwagę:
HTH
$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" />
echo mb_substr ($ tytuł, 0, 1); Wynik: –
mb_substr nie pomaga –
Czy możesz opublikować tutaj cały ciąg? –
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.
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 в
Nie działa dla mnie bez parametru "UTF8". Dzięki! – PiTheNumber
+1 za wspomnienie kodowania DB i' mb_internal_encoding' –
... i jak wspomniano w dwóch pozostałych odpowiedziach powinieneś używać 'mb_substr' –
mb_internal_encoding ("UTF-8"); - Działa w porządku! dzięki! –