2011-01-21 5 views

Respuesta

9

Sé que no ha enumerado CSS en sus etiquetas, pero la mayoría de las veces es más fácil dejar esto al lado del cliente (si solo pretendía esta cadena para la visualización del navegador).

Al aplicar CSS text-transform: uppercase; haremos esto por usted.

+0

gracias! ¡Debería haber pensado en eso! – laukok

+0

La única desventaja es que no le ayudará a resolver el mismo problema en la etiqueta del título –

3

Bueno, elimine las entidades y use un conjunto de caracteres de varios bytes.

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

A continuación, emita la secuencia. No es necesario que exista la mayoría de las entidades html, solo use los caracteres nativos y establezca el resultado del documento correctamente.

Si realmente tiene que utilizar las entidades, una expresión regular está en orden:

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

Tenga en cuenta que no he probado que la expresión regular, pero debería funcionar, ya que está en busca de letras que no son seguidos inmediatamente por un personaje ; ...

+0

Creo que la expresión regular debería ser $ regex = '/ \ w + (? = &) | (? <=;) \ W + /' ya que busca caracteres en barbecho por y/o caracteres que proceden de; También creo que el índice en $ match [1] debería ser $ match [0]? – Marcin

+0

@Marcin: Gracias, he editado esa expresión regular. Y quise decir '[1]', pero también quise envolver la clase de caracteres original en un subpatrón ... – ircmaxell

1

es mejor convertir cadena a mayúsculas primero de decodificación de lo que conseguirá resultado deseado

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

f unción mayúsculas strtoupper($var); de salida será

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

htmlentities de función() $var=htmlEntities($var); SALIDA:

&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 

codificación final $var=html_entity_decode($var); salida:

ESTA IS TEST
NUEVA LÍNEA

Si las primeras htmlentities se convierten en mayúsculas; la decodificación fallará cuando la prueba codificada cambie a mayúscula y la función falle;

1

No puedo usar la variante CSS por kapa, porque necesito esto para la etiqueta del título. La solución proporcionada por ircmaxell podría estar en lo cierto, pero ya que algunos servidores no tienen mbstring extensión, esta solución podría ser mejor:

echo htmlentities(strtoupper(html_entity_decode($str))); 
Cuestiones relacionadas