2011-01-21 10 views

risposta

9

So che non hai elencato i CSS in tag, ma la maggior parte del tempo è più facile lasciare questo al lato client (se intendevi questa stringa solo per la visualizzazione del browser).

L'applicazione di CSS text-transform: uppercase; lo farà per voi.

+0

grazie! Avrei dovuto pensarci! – laukok

+0

L'unico svantaggio è che non ti aiuterà a risolvere lo stesso problema nel tag title –

3

Bene, rimuovere le entità e utilizzare un set di caratteri multibyte!

$string = html_entity_decode($string, ENT_COMPAT, 'UTF-8'); 
$string = mb_convert_case($string, MB_CASE_UPPER, 'UTF-8'); 

Quindi inviare la stringa. Non è necessario per la maggior parte delle entità html, basta usare i caratteri nativi e impostare correttamente l'output del documento.

Se davvero si deve utilizzare le entità, una regex è in ordine:

$callback = function($match) { 
    return strtoupper($match[1]); 
} 
$regex = '/(\w+(?=&)|(?<=;)\w+)/'; 
$string = preg_replace_callback($regex, $callback, $string); 

Si noti che non ho ancora testato che regex, ma dovrebbe funzionare dal momento che è alla ricerca di lettere che non sono immediatamente seguiti da un personaggio ; ...

+0

Penso che la regex dovrebbe essere $ regex = '/ \ w + (? = &) | (? <=;) \ W + /' come cerca i personaggi a cui appartengono i caratteri & o che sono proceduti da; Penso anche che l'indice in $ match [1] dovrebbe essere $ match [0]? – Marcin

+0

@Marcin: Grazie, ho modificato la regex. Intendevo '[1]', ma intendevo anche avvolgere la classe di caratteri originale in un sotto-modello ... – ircmaxell

1

E 'meglio convertire la stringa in maiuscolo prima di decodifica di quanto avrete desiderato risultato

$var=<i>This</i><u>is</u><b>test</b><br>New line 

f unzione maiuscolo strtoupper($var); uscita sarà

<I>THIS</I><U>IS</U><B>TEST</B><BR>NEW LINE 

htmlentities function() $var=htmlEntities($var); USCITA:

&lt;I&gt;THIS&lt;/I&gt;&lt;U&gt;IS&lt;/U&gt;&lt;B&gt;TEST&lt;/B&gt;&lt;BR&gt;NEW LINE 

di codifica finale $var=html_entity_decode($var); uscita:

QUESTO IS TEST
NUOVA LINEA

Se la prima htmlentity viene convertita rispetto al maiuscolo; la decodifica fallirà quando il test codificato sarà cambiato in maiuscolo e la funzione fallita;

1

Non posso usare la variante CSS di kapa, perché ho bisogno di questo per il tag del titolo. La soluzione fornita da ircmaxell potrebbe essere giusto, ma dal momento che alcuni server non hanno mbstring estensione, questa soluzione potrebbe essere migliore:

echo htmlentities(strtoupper(html_entity_decode($str))); 
Problemi correlati