Foros del Web » Programando para Internet » PHP »

[arreglado]Hay una cosa en este codigo que hace que se muestre mal el <?

Estas en el tema de [arreglado]Hay una cosa en este codigo que hace que se muestre mal el <? en el foro de PHP en Foros del Web. Hola, tengo un sistema de noticias que tiene bbcodes El problema llega cuando dentro de la etiqueta [ php ] pones <? y ?> al ...
  #1 (permalink)  
Antiguo 02/05/2009, 16:01
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 15 años, 8 meses
Puntos: 13
Pregunta [arreglado]Hay una cosa en este codigo que hace que se muestre mal el <?

Hola, tengo un sistema de noticias que tiene bbcodes

El problema llega cuando dentro de la etiqueta [ php ] pones <? y ?> al enviar el articulo te salen como &lt;? ?&gt; cuando tendria que salir asi: <? ?> pero sin hacer funcion ni nada

este es el codigo de los bbcodes :S
Código PHP:
<?php 

function bbcodes ($text) { 
    
    
$finaltext eregi_replace("\\[web=([^\\[]*)\\]([^\\[]*)\\[/web\\]""<a target=\"_blank\" href=\"\\1\">\\2</a>"$text); 

    
    
$finaltext eregi_replace("\\[web\\]([^\\[]*)\\[/web\\]","<a target=\"_blank\" href=\"\\1\">\\1</a>",$finaltext); 

    
    while(
$bucle 5) { 
        
        
$finaltext eregi_replace("\\[u\\]([^\\[]*)\\[/u\\]","<u>\\1</u>"$finaltext); 

        
        
$finaltext eregi_replace("\\[i\\]([^\\[]*)\\[/i\\]","<em>\\1</em>"$finaltext); 

        
        
$finaltext eregi_replace("\\[b\\]([^\\[]*)\\[/b\\]","<strong>\\1</strong>"$finaltext); 

        
$bucle++; 
    } 

    
    
$finaltext eregi_replace("\\[center\\]([^\\[]*)\\[/center\\]","<center>\\1</center>"$finaltext); 

     
    
$finaltext eregi_replace("\\[cita\\]([^\\[]*)\\[/cita\\]","\n<div class=\"css_title\">Cita\n<div class=\"css\">\\1</div></div>"$finaltext); 

     
    
preg_match_all ("/(\[)(php)(])(.*)(\[\/php\])/iU"$finaltext$l); 
    for (
$i=0$icount($l[0]); $i++) { $finaltext str_replace($l[0][$i],phpcojecolor($l[4][$i]),$finaltext); } 

    
// Retorno como queda el bbcode. 
    
return $finaltext


function 
phpcojecolor ($php) {
        
// Remplaza los <br \> por lineas.
        
$php str_replace("<br \>","\n",$php);

        
ob_start(); // Abirmos el OB
        
highlight_string($php); // Tiramos el codigo coloreado
        
$cfinal ob_get_contents(); // COjo el codigo que tire despues de haber abierto el ob
        
ob_end_clean(); // Borro el ob para que no se vea en la web

        
$keycol=ini_get("highlight.keyword"); 
        
$manual="http://www.php.net/manual-lookup.php?lang=es&amp;pattern=";

        
$cfinal=preg_replace
            
'{([\w_]+)(\s*</font>)'
            
'(\s*<font\s+color="'.$keycol.'">\s*\()}m',  
            
'<a href="'.$manual.'$1" title="Ayuda en PHP.net sobre $1" target="_blank">$1</a>$2$3',
        
$cfinal); 

        return 
"\n<div class=\"css_title\">C&oacute;digo PHP:\n<div class=\"css\">".$cfinal."</div></div>"// Retorno el codigo PHP Coloreado
}
// Debes poner la siguiente clase en tu hoja de estilos o en su defecto en tu código html. 
// Estas clases es para que funciones lo de las citas y lo de mostrar codigo PHP :D 
// .css_title { 
//     margin: 10px 5px 10px 15px; 
//     font-size: 10px; 
//     width: 90%; 
//      
// } 
// .css { 
//     background: #DCDCDC;     
//     border: 1px solid #8FB1EE; 
//     border-left: 7px solid #8FB1EE; 
//     font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; 
//     font-size: 11px; 
//     color: #000000; 
//     padding: 5px; 
//     width: 90%; 
//     margin: 0px; 
// } 

?>
Quiza deba cambiar de codigo :(

Espero que me puedan ayudar
Gracias
Me tienen que decir que parte de la linea hace que pase esto para asi editarla. Gracias ;)
__________________
SumarioWeb
@sumarioweb
BasicNews

Última edición por fcdragons; 03/05/2009 a las 13:01
  #2 (permalink)  
Antiguo 02/05/2009, 19:37
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Hay una cosa en este codigo que hace que se muestre mal el <?

Cita:
El problema llega cuando dentro de la etiqueta [ php ] pones <? y ?> al enviar el articulo te salen como &lt;? ?&gt; cuando tendria que salir asi: <? ?> pero sin hacer funcion ni nada
Y como pretendes que si no se convierten los caracteres a entidades HTML, ¿el código NO se ejecute?
De hecho, asi es como deberia quedar ... convertido a sus entidades HTML.

PD:
Cita:
$php = str_replace("<br \>","\n",$php);
Un salto de linea es <br />, no <br \>
  #3 (permalink)  
Antiguo 02/05/2009, 21:34
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Hay una cosa en este codigo que hace que se muestre mal el <?

Es algo complejo el tema de bbcodes para incrustar códigos. Si conviertes a entidades html antes de pasar el texto por la función que va a colorear el codigo, entonces tendrás un coloreado incorrecto (como el que obtienes). Si lo haces después, arruinarás el coloreado.

Una solución "rápida" es codificar TODO el texto a entidades html antes de procesar los bbcodes (tal y como lo estas haciendo), y cuando se trate de procesar el código, decodificar primero SÓLO el bloque correspondiente al código y luego colorear. En tu caso, antes de usar highlight_string() en tu función phpcojecolor(), usar htmlspecialchars_decode() o html_entity_decode() para regresar el código a su versión original.

  #4 (permalink)  
Antiguo 03/05/2009, 00:54
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 15 años, 8 meses
Puntos: 13
Respuesta: Hay una cosa en este codigo que hace que se muestre mal el <?

ok si entendi mas o menos seria algo asi¿?
$variable = html_entity_decode($variable);
echo html_entity_decode($variable);
__________________
SumarioWeb
@sumarioweb
BasicNews
  #5 (permalink)  
Antiguo 03/05/2009, 12:35
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Hay una cosa en este codigo que hace que se muestre mal el <?

además utiliza la libreria PCRE, ya que la libreria POSIX es obsoleta a partir de la versión 5.3

suerte.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #6 (permalink)  
Antiguo 03/05/2009, 12:41
Avatar de fcdragons  
Fecha de Ingreso: agosto-2008
Ubicación: echo $_REQUEST['ubicacion'];
Mensajes: 474
Antigüedad: 15 años, 8 meses
Puntos: 13
Respuesta: Hay una cosa en este codigo que hace que se muestre mal el <?

¿el que de la libreria? xd eso si qu no entendi nada si me podrias explicar mejor :S
__________________
SumarioWeb
@sumarioweb
BasicNews
  #7 (permalink)  
Antiguo 03/05/2009, 16:03
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: [arreglado]Hay una cosa en este codigo que hace que se muestre mal el <?

http://www.php.net/manual/es/intro.regex.php and

http://www.php.net/manual/es/book.pcre.php

los cambios que se van dando

http://cvs.php.net/viewvc.cgi/php-sr...athrev=PHP_5_3
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
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 15:51.