2010-03-25 6 views
22

ich in meiner Seite Text in Fremdsprache haben, , aber wenn ich es klein geschrieben machen, beginnt es wie folgt aussehen ...Probleme mit strtolower Funktion


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

ich habe eingestellt <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> können Sie mir sagen, warum? danke im voraus

+0

Die Unicode-Monster schlägt gefunden! Hier, haben Sie einen Link: http://www.joelonsoftware.com/articles/Unicode.html –

+0

Gibt es sogar so etwas wie Kleinbuchstaben Arabisch oder was auch immer das ist?: P – Fabian

+0

Achten Sie darauf, auch den Content-Type-Header zu senden, in einigen Browsern hat er Vorrang vor dem Meta-Tag. –

Antwort

46

haben Sie versucht mit mb_strtolower()?

+0

ja, ich habe es getestet. funktioniert nicht. – Simon

+1

@Syom haben Sie UTF-8 als Kodierung angegeben? –

+1

könnte auch mb_internal_encoding() zuerst benötigen – SteelBytes

2

Verwenden Sie stattdessen mb_strtolower, da strtolower bei Multi-Byte-Zeichen nicht funktioniert.

+0

'strtolower' funktioniert tatsächlich mit Multibyte-Zeichen, es funktioniert nur vom aktuellen Gebietsschema, was in diesen Fällen normalerweise nicht das ist, was Sie wollen. –

1

strtolower() wird die Umwandlung in die aktuell ausgewählte locale auszuführen.

Ich würde versuchen mb_convert_case(). Stellen Sie sicher, dass Sie eine Codierung explizit angeben.

17

PHP5 ist nicht UTF-8-kompatibel, Sie müssen also immer noch auf die mb-Erweiterung zurückgreifen. Ich schlage vor, Sie die interne Codierung von mb zu utf-8 eingestellt und dann können Sie sich frei seine Funktionen verwenden, ohne die charset die ganze Zeit festgelegt wird:

mb_internal_encoding('UTF-8'); 

... 

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

PHP kennt standardmäßig nicht UTF-8. Es wird davon ausgegangen, dass jede Zeichenfolge ASCII ist, also konvertiert strtolower Bytes, die Codes von Großbuchstaben A-Z enthalten, in Codes von Kleinbuchstaben a-z. Da die UTF-8-Nicht-Ascii-Buchstaben mit zwei oder mehr Bytes geschrieben werden, konvertiert der Strtolower jedes Byte einzeln, und wenn das Byte zufällig einen Code enthält, der gleich den Buchstaben A-Z ist, wird es konvertiert. Im Ergebnis ist die Sequenz unterbrochen und repräsentiert nicht mehr das korrekte Zeichen.

Dazu müssen Sie ändern die mbstring Erweiterung konfigurieren:

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

strtolower mit mb_strtolower zu ersetzen oder mb_strtolower direclty verwenden. Auf jeden Fall müssen Sie etwas Zeit investieren, um die mbstring-Einstellungen Ihren Anforderungen entsprechend zu konfigurieren.

8

Ich habe diese Lösung von 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.''; 
wieder

Werke für mich (Kleinschreibung)

Verwandte Themen