Foros del Web » Programando para Internet » PHP »

como evitar "emoticonos" dentro de <pre>

Estas en el tema de como evitar "emoticonos" dentro de <pre> en el foro de PHP en Foros del Web. hola amigos tengo un problema y es que cuando alguien inserta por ejemplo dentro de <pre> </pre> un emoticono este se muestra con su remplazo ...
  #1 (permalink)  
Antiguo 07/11/2011, 13:31
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
como evitar "emoticonos" dentro de <pre>

hola amigos tengo un problema y es que cuando alguien inserta por ejemplo dentro de <pre> </pre> un emoticono este se muestra con su remplazo es decir con la imagen.

como hago para que se muestre:

Código:
:patada:
y no la imagen?

el problema es que remplazo los emoticonos directos. espero alguien pueda ayudarme.

asi muestro los emoticonos:
Código PHP:
Ver original
  1. $miUrl = str_replace(":D", '<img src="images/smiles/sunrise.gif">', $miUrl);
  2. $miUrl = str_replace(":)", '<img src="images/smiles/happy.gif">', $miUrl);
  3. $miUrl = str_replace(":(", '<img src="images/smiles/sad.gif">', $miUrl);
  4. $miUrl = str_replace(":O", '<img src="images/smiles/surprise.gif">', $miUrl);
  5. $miUrl = str_replace(":shock:", '<img src="images/smiles/freak.gif">', $miUrl);
  6. $miUrl = str_replace(":mmm:", '<img src="images/smiles/mmm.gif">', $miUrl);
  7. $miUrl = str_replace(":cool:", '<img src="images/smiles/cool.gif">', $miUrl);
  8. $miUrl = str_replace(":XD:", '<img src="images/smiles/XD.gif">', $miUrl);
  9. $miUrl = str_replace(":P", '<img src="images/smiles/guaz.gif">', $miUrl);
  10. $miUrl = str_replace(":oops:", '<img src="images/smiles/oops.gif">', $miUrl);
  11. $miUrl = str_replace(":cry:", '<img src="images/smiles/cry.gif">', $miUrl);
  12. $miUrl = str_replace(":hell:", '<img src="images/smiles/hell.gif">', $miUrl);
  13. $miUrl = str_replace(":angry:", '<img src="images/smiles/angry.gif">', $miUrl);
  14. $miUrl = str_replace(":roll:", '<img src="images/smiles/roll.gif">', $miUrl);
  15. $miUrl = str_replace(":zzz:", '<img src="images/smiles/zzz.gif">', $miUrl);
  16. $miUrl = str_replace("^^", '<img src="images/smiles/miau.gif">', $miUrl);
  17. $miUrl = str_replace(":love:", '<img src="images/smiles/love.gif">', $miUrl);
  18. $miUrl = str_replace("U_U", '<img src="images/smiles/nah.gif">', $miUrl);
  19. $miUrl = str_replace("X_X", '<img src="images/smiles/ownzed.gif">', $miUrl);    $miUrl = str_replace("(y)", '<img src="images/smiles/thumbsup.gif">', $miUrl);
  20. $miUrl = str_replace("(n)", '<img src="images/smiles/thumbsdown.gif">', $miUrl);

Gracias
  #2 (permalink)  
Antiguo 07/11/2011, 14:04
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como evitar "emoticonos" dentro de <pre>

me parece que el problema es usar <pre>, deberías usar nl2br para reemplazar los saltos de linea en <br />
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 07/11/2011, 14:33
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: como evitar "emoticonos" dentro de <pre>

disculpa amigo, creo que me perdi!

que tiene que ver nl2br() con que no se ejecute el str_replace() del emoticono dentro de las etiquetas <pre></pre>? para que asi simplemente se muestra por ejemplo
Código:
:)   ;)  :O
y no las imagenes gif.

gracias por responder espero puedas ayudarme!
  #4 (permalink)  
Antiguo 07/11/2011, 14:59
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: como evitar "emoticonos" dentro de <pre>

en primera instancia ¿para que usas <pre>?, es lo primero que nos debes aclarar, ¿cual es el objetivo de los emoticonos?: si no quieres que se procesen ¿para que los procesas?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 07/11/2011, 18:56
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: como evitar "emoticonos" dentro de <pre>

quiero que los emoticonos se muestren fuera de las etiquetas <pre></pre> que son las que uso para cuando las personas insertarán codigo en vez de <code> dentro del articulo.

no quiero que se muestren los emoticonos si no los simbolos como :) DENTRO de <pre> </pre> debido a que es CODIGO solo codigo.

como aqui mira:

Emoticono esto no esta dentro <pre> es decir codigo:


esto esta dentro de codigo <pre> por eso se muestra el simbolo
Código:
 :-)
eso es lo que quiero
  #6 (permalink)  
Antiguo 07/11/2011, 19:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: como evitar "emoticonos" dentro de <pre>

Lo que sucede es que no puedes especificarle a str_replace() que esquive los <pre>, pues la función trabaja con la cadena de texto completa.

Lo que si puedes hacer es extraer lo que está dentro de los <pre> con expresiones regulares y así puedes colocar una marca, haces tus reemplazos y después recuperas el texto original dentro de los <pre> basandote en la marca.

No es algo sencillo si no sabes de lo que hablo, te sugiero investigar al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/11/2011, 21:18
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: como evitar "emoticonos" dentro de <pre>

estas funciones la use para que no se ejecutaran los saltos de linea dentro del <pre> y funciono puedes ayudarme a pasarla para que los emoticonos no se ejecuten dentro del <pre> si no los simbolos?

Código PHP:
Ver original
  1. function findOpenPre($line) {
  2.         $start = strpos($line,'<pre');
  3.         if ($start === false) {
  4.             return nl2br($line);
  5.            
  6.         } else {
  7.             return nl2br(substr($line,0,$start-1)).findClosePre(substr($line,$start));
  8.         }
  9.     }
  10.    
  11.     function findClosePre($line) {
  12.         $start = strpos($line,'</pre>');
  13.         if ($start === false) {
  14.             return $line.'</pre>'; # should never come here
  15.        } else {
  16.             return substr($line,0,$start+6).findOpenPre(substr($line,$start+7));
  17.         }
  18.     }
  #8 (permalink)  
Antiguo 08/11/2011, 01:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: como evitar "emoticonos" dentro de <pre>

Hace algun tiempo desarrolle un foro y, para evitarme problemas, base el interprete de bbcode (bbcode parser) en el de otros foros; recuerdo haber descargado PunBB, PhpBB, SMF y tal vez algun otro... al final, simplemente adapte el que mejor entendi.

Entre las ventajas de hacer eso esta lo de los emoticonos, codigo, citas textuales, etiquetas abiertas que no se cierran (o viceversa) y algunas otras cosas que por ahora no recuerdo.

O bien, podrias seguir la sugerencia de pateketrueke e investigar como lograrlo con expresiones regulares.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: emoticonos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.