anomalia strtoupper

Ciao a tutti,

non capisco cosa stia succedendo ieri utilizzavo uno script che prendeva delle località e le convertiva in maiuscolo.

Sebbene non abbia modificato ninete lo script non funziona più.

Questo è il problema: le lettere accentate

$str="più";

$str_g=strtoupper($str);

echo $str_g;

echo "$str_g" dovrebbe essere PIU' invece mi da PIù

perchè??

Se ieri funzionava oggi cosa c'è che non va?

come posso risolvere?

inviato 10 anni fa
stellina
X 0 X

risolto con mb_strtoupper($str);   :D

mah ???

risposto 10 anni fa
stellina
X 0 X

Veramente funziona ancora, è che non esiste ù maiuscola e U' sono 2 caratteri non 1 convertito in maiuscola.

Dire che proprio non esiste è scorretto, diciamo che non è standard.

Fai un controllo prima di strtoupper e sostituisci le accentate con queste:

    *  à à
    * è è
    * é é
    * ì ì
    * ò ò
    * ù ù
    * À À
    * È È
    * É É
    * Ì Ì
    * Ò Ò
    * Ù Ù
risposto 10 anni fa
LonelyWolf
X 0 X

allora non sarebbe meglio htmlentities() ?

comunque non credo intendesse quello

risposto 10 anni fa
Xscratch
X 0 X

allora non sarebbe meglio htmlentities() ?

comunque non credo intendesse quello

No, htmlentities sostituisce un carattere con l'equvalente entità in html, ledi doveva renderlo maiuscolo.

Cmq ha risolto.

risposto 10 anni fa
LonelyWolf
X 0 X

si,appunto... io suggerivo htmlentities al posto del controllo manuale prima di strtoupper che hai suggerito tu, che appunto era incentrato sulle accentate e non sulle maiuscole

risposto 10 anni fa
Xscratch
X 0 X

Comunque c'è una certa differenza tra volere le lettere maiuscole e le entità html relative...

Dal manuale si deduce che strtoupper utilizza il "locale" corrente per classificare i caratteri e quindi convertirli in maiuscolo, mentre mb_strtoupper non considera le impostazioni del locale ma le deduce dal set di caratteri della stringa passatagli.

Quindi suppongo che impostando con setlocale() (LC_ALL o almeno LC_CTYPE) il corretto set di caratteri allora strtoupper dovrebbe funzionare.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda