2010-03-25 13 views
22

ho qualche testo in lingua straniera nella mia pagina, ma quando i renderlo minuscolo, si inizia a guardare come questo ...problemi con la funzione strtolower


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

ho impostato <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> potresti dirmi perché? grazie in anticipo

+0

I Unicode mostro colpisce ancora! Qui, hai un link: http://www.joelonsoftware.com/articles/Unicode.html –

+0

Esiste anche una cosa come la lettera minuscola araba o quello che è?: P – Fabian

+0

Assicurati di inviare anche l'intestazione Content-Type, in alcuni browser ha la priorità sul meta tag. –

risposta

46

hai provato con mb_strtolower()?

+0

sì, l'ho provato. non funziona – Simon

+1

@Syom hai specificato UTF-8 come codifica? –

+1

potrebbe anche aver bisogno di mb_internal_encoding() prima – SteelBytes

2

Utilizzare invece mb_strtolower, poiché strtolower non funziona su caratteri multibyte.

+0

'strtolower' funziona effettivamente su caratteri multibyte, funziona solo sulle impostazioni locali correnti, che in genere non è ciò che si desidera in questi casi. –

1

strtolower() eseguirà la conversione solo alle impostazioni internazionali attualmente selezionato.

Vorrei provare mb_convert_case(). Assicurati di specificare esplicitamente una codifica.

17

PHP5 non è compatibile con UTF-8, quindi è ancora necessario ricorrere all'estensione mb. Vi suggerisco di impostare la codifica interna di mb a UTF-8 e quindi è possibile utilizzare liberamente le sue funzioni senza specificare il set di caratteri per tutto il tempo:

mb_internal_encoding('UTF-8'); 

... 

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

Php per default non sapere di utf-8. Presuppone che ogni stringa sia ASCII, quindi converte strtby byte che contengono codici di lettere maiuscole dalla A alla Z di lettere minuscole a-z. Poiché le lettere non ASCII UTF-8 vengono scritte con due o più byte, lo strtolower converte ciascun byte separatamente e, se il byte contiene codice uguale alle lettere A-Z, viene convertito. Nel risultato la sequenza è rotta e non rappresenta più il carattere corretto.

Per modificare questo è necessario configurare l'estensione mbstring:

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

per sostituire strtolower con mb_strtolower o utilizzare mb_strtolower direttamene. In ogni caso, è necessario dedicare un po 'di tempo a configurare le impostazioni di mbstring in base alle proprie esigenze.

8

Ho trovato questa soluzione da 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.''; 

lavori per me (minuscolo)

Problemi correlati