Ver Mensaje Individual
  #7 (permalink)  
Antiguo 28/10/2012, 16:00
Avatar de salbatore
salbatore
 
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: Expresion regular que me haga un milagro

Hola de nuevo a todos,

Gracias por interesaros a todos. Os explico mas el problema, pues igual no me explique muy bien.

Tengo una web que es generada por un sistema al que no tengo acceso. El sistema usa mucho Javascript, haciendo uso de las clases del HTML, algunas con guion bajo. El CSS tambien esta relacionado a las clases que usan el guion bajo.

El problema es que IE6 no comprende las clases con guion bajo. Por ello he creado un codigo para detectarlo y reemplazar todas las clases de mi HTML y del CSS, no del JS, pues ese si funciona en IE6. Solo me falta la expresion regular, lo mas importante.

Por ello de una clase como esta "_calendario calendario-rojo" necesito que pase a ser "_calendario calendario calendario-rojo". No creo que sea mucho consumo del servidor si lo hago con una sola expresion regular y siempre al final, cuando libere el buffer.

He avanzado un poco en la expresion, pero no consigo hacerlo de todo...

Código PHP:
Ver original
  1. $string = "<div class='calendario-rojo _calendario _otro calendario-grande' >Esto es un calendario con clase _calendario</div>";
  2. echo htmlentities($string);
  3. echo '<hr/>';
  4. $salida = preg_replace("| class=[\"\'](.*?)\_(.*?)[\s]|", "class='$1 $2 _$2 $3", $string);
  5. echo htmlentities($salida) ;

Como veis, la expresion hace casi lo que quiero, no consigo hacer que duplique todas las clases que encuentre dentro, solo lo hace con la primera.

¿Me echais una mano? :P

Sobre dar por perdida la batalla con IE6, estoy de acuerdo. Pero si la solucion es pasar una expresion al html al final de todo, pues me parece correcto hacerlo. Es que no estoy hablando de que en IE6 falle algo, es que no se absolutamente nada, ya que todas las clases usan el guion bajo, :P. Es una web encargada, si fuese para mi, pondria un cartelito con "Actualice su navegador".

De todos modos, la solucion creo que es de lo mas simple conociendo las locuras que en el CSS he llegado hacer para IE.

:D

Última edición por salbatore; 28/10/2012 a las 16:22