Maiuscole accentate in PHP
lunedì 16 marzo 2009La funzione strtoupper() di PHP trasforma la stringa passata come parametro nella sua versione maiuscola.
// Stampa CASA
echo strtoupper("casa");
A noi italiani, come al solito, piace “distinguerci” e utilizziamo sovente lettere accentate. Putroppo strtoupper() non trasforma le lettere accentate lasciandole minuscole:
// Stampa FELICITà
echo strtoupper("felicità");
Come ovviare? Con una semplice funzione custom, che mi è stata molto utile recentemente:
function maiuscolo($stringa)
{
$accentate = array("à","è","é","ì","ò","ù");
$sostituzioni = array("A'","E'","E'","I'","O'","U'");
return strtoupper(str_replace($accentate,$sostituzioni,$stringa));
}
// Stampa FELICITA'
echo maiuscolo("felicità");
Si accettano versioni più “carine”. Inviatemele per posta o fate un post sul vostro blog!
In alternativa puoi abbonarti alla newsletter, riceverai un'email ogni volta che verrà pubblicato un nuovo post. Il tuo indirizzo email sarà gestito da Feedburner.


















16 marzo 2009 alle 17:18
Se si tratta solo di comportamento “visuale” sarebbe stato più semplice tramite CSS:
text-transform: uppercase;Altrimenti dai un’occhiata a questo: http://it.php.net/manual/en/function.strtoupper.php#82592
16 marzo 2009 alle 19:12
Ovviamente dipende dalle necessità, ma anche io come unwiredbrain ci sarei andato giù di regoletta css.
16 marzo 2009 alle 19:34
@ Asterisco:
Ovvio. Ma non si vive di solo CSS
16 marzo 2009 alle 19:53
In ogni caso, supponendo di dover andare a stampare a video la stringa, io il vettore $sostituzioni l’avrei riempito con le corrispettive entità html. Ovviamente la soluzione che viene proposta nel link di unwiredbrain la trovo molto più elegante di qualsiasi cosa possa venirmi in mente.
16 marzo 2009 alle 21:40
@ Asterisco:
16 marzo 2009 alle 23:21
Non ho idea di come possa realizzarsi in PHP, ma un’alternativa sarebbe:
1. ottenere il numero di entità esadecimale (UTF-16!) di ogni singolo carattere (chiamiamolo “h” per comodità);
2. controllare che sia compreso fra
0xE0e0xFF(inclusi)3. in caso positivo ritornare il carattere di entità esadecimale pari a “h” ridotta di
0x20L’unico inconveniente è rappresentato dal carattere
0xF7(“÷”), il cui “maiuscolo” sarebbe rappresentato da “×”Tra l’altro, manipolare direttamente le entità esadecimali è molto conveniente, dal momento che per utilizzare poi i caratteri in maniera “sicura” basta riconvertire in decimale l’entità esadecimale e piazzarla in mezzo a
&#e;17 marzo 2009 alle 07:16
@ unwiredbrain:
Interessante, ma un filino complicato
17 marzo 2009 alle 18:46
@ Napolux:
Vero!
La cosa però mi stuzzicava parecchio, non potevo credere che davvero non esistesse alternativa, così girovagando per la documentazione di PHP ho trovato questo: http://it.php.net/manual/en/function.mb-convert-case.php
L’utilizzo è di una semplicità disarmante:
mb_convert_case("aeiou áàéèíìóòúù", MB_CASE_UPPER, 'utf-8')Occhio: l’encoding deve essere
utf-8!Altre costanti utili: http://it.php.net/manual/en/mbstring.constants.php
Per quanto riguarda JavaScript, buone notizie:
"aeiou áàéèíìóòúù".toUpperCase()restituisceAEIOU ÁÀÉÈÍÌÓÒÚÙ21 marzo 2009 alle 10:09
[...] Maiuscole accentate in PHP [...]
25 marzo 2009 alle 22:54
Napolux, ma alla fine ti è tornata utile
mb_convert_case?No, perché in realtà mi sono reso conto che avresti fatto prima con
mb_strtoupperSecondo me comunque l’intera estensione
mbstringrisulta estremamente utile; in particolar modo, trovo comodissimo il fatto che permetta di effettuare l’overloading di tutta una serie di funzioni molto comuni, come ad esempiostrtoupper,strtolower,mail,ereg, ecc.Per mettere in atto l’overloading, basta settare correttamente le direttive
mbstring.func_overload(all’interno diphp.ini!) embstring.internal_encoding. Credo che più semplice di così, davvero, non si possa…NB: io sto scoprendo tutto ciò solo adesso, pertanto chiedo scusa a tutti anticipatamente nel caso in cui stia parlando di cose trite e ritrite.
25 marzo 2009 alle 23:49
@ unwiredbrain:
Alla fine la soluzione più semplice è sempre il text-transform CSS
26 marzo 2009 alle 01:00
Sbaglio o qualcuno diceva che «non si vive di solo CSS»?