2010-03-25 20 views
22

mam jakiś tekst w języku obcym w moją stronę, ale kiedy robię to małe litery, to zaczyna wyglądać tak ...problemy z funkcją strtolower


$a = "Երկիր Ավելացնել"; 
echo $b = strtolower($a); 
//returns ����� ��������� 

I ustawione <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> czy możesz mi powiedzieć, dlaczego? z góry dzięki

+0

Unicode potwór znowu strajki! Tutaj masz link: http://www.joelonsoftware.com/articles/Unicode.html –

+0

Czy jest coś takiego jak małe litery arabski czy cokolwiek to jest?: P – Fabian

+0

Upewnij się, że wysyłasz również nagłówek Content-Type, w niektórych przeglądarkach ma wyższy priorytet niż metatag. –

Odpowiedz

46

czy próbowałeś używać mb_strtolower()?

+0

Tak, przetestowałem to. nie działa. – Simon

+1

@Syom czy określiłeś UTF-8 jako kodowanie? –

+1

może również potrzebować mb_internal_encoding() najpierw – SteelBytes

2

Zamiast tego należy użyć mb_strtolower, ponieważ strtolower nie działa w przypadku znaków wielobajtowych.

+0

'strtolower' faktycznie działa na znakach wielobajtowych, po prostu działa poza bieżącymi ustawieniami narodowymi, co zwykle nie jest tym, czego potrzebujesz w tych przypadkach. –

1

strtolower() wykona konwersję tylko w aktualnie wybranej lokalizacji.

Chciałbym wypróbować mb_convert_case(). Upewnij się, że jawnie określasz kodowanie.

17

PHP5 nie jest kompatybilny z UTF-8, więc nadal potrzebujesz uciekać się do rozszerzenia mb. Proponuję ustawić wewnętrznego kodowania mb na UTF-8, a następnie można swobodnie korzystać z jego funkcji bez podania charset cały czas:

mb_internal_encoding('UTF-8'); 

... 

$b = mb_strtolower($a); 
echo $b; 
3

Php domyślnie nie wie o utf-8. Zakłada on, że dowolny ciąg jest ASCII, więc strtolower konwertuje bajty zawierające kody wielkich liter A-Z na kody małych liter a-z. Ponieważ litery ASC UTF-8 są pisane z dwoma lub więcej bajtami, strtolower konwertuje każdy bajt osobno, a jeśli bajt składa się z kodu równego literom A-Z, jest konwertowany. W rezultacie sekwencja jest zerwana i nie reprezentuje już poprawnego charakteru.

W tym celu należy skonfigurować rozszerzenie mbstring zmienić:

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

zastąpić strtolower z mb_strtolower lub użyj mb_strtolower direclty. W każdym przypadku musisz poświęcić trochę czasu na skonfigurowanie ustawień mbstring zgodnie z Twoimi wymaganiami.

8

znalazłem to rozwiązanie z here

$string = 'Թ'; 
echo 'Uppercase: '.mb_convert_case($string, MB_CASE_UPPER, "UTF-8").''; 
echo 'Lowercase: '.mb_convert_case($string, MB_CASE_LOWER, "UTF-8").''; 
echo 'Original: '.$string.''; 

pracuje dla mnie (małymi literami)