Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 21 Abril 2008, 22:30 pm



Título: Como puedo mostrar un codigo fuente ???
Publicado por: Diabliyo en 21 Abril 2008, 22:30 pm
Hola:

Pues asi es, digamos que tengo mi propio Sistema de Noticias, y pues se me ocurre escribir un mensaje en donde quiero mostrar FRAGMENTOS de codigo fuente, vaya, puede ser codigo fuente de lenguajes como: C, C++, PHP, etc, etc...

He intentado de diferentes formas que el codigo se visualize asi:

Código:
#include <stdio.h>
#include <stdlib.h>

int main()
          {
          printf( "hola" );
          getchar();
          return 0;
          }

Pero al intentar que mostrar el mensaje NO muestra ciertas cosas, digamos que se come lo que va delante de: #include, y cosas asi !!...

Despues de seguir buscando me encontre con la funcion highlight_file() que te muestra el contenido de un codigo ya formateado, pero no  me muestra el code bien :(

Como ejemplo, quisiera saber como puedo hacer para que se imprima esto:

Código:
<?php
$var='#include <stdio.h>
#include <stdlib.h>

int main()
      {
      system( "clear" );
      printf( "hola" );
      getchar();
      return 0;
      }
';

echo $var;
?>

Resultado:
Código:
//como vemos, se comio lo que esta delante del '#include'

#include #include int main() { system( "clear" ); printf( "hola" ); getchar(); return 0; }

En cambio si escribo el CODIGO FUENTE en una rchivo, y despues lo invoco con la funcion highlight_file(), el codigo se muestra bien formateado.. Pero no logro hacer que highlight_file() funcione mediante una variable que contiene dicho codigo :( :
Código:
<?php
echo highlight_file("codigo.c");
?>

El fin de todo esto es poder consultar los datos de la BDD e imprimir el codigo dentro de un area determinada (usando <div>), he invocando la insecion de esto con etiquetas tipo BBCode...


Título: Re: Como puedo mostrar un codigo fuente ???
Publicado por: дٳŦ٭ en 22 Abril 2008, 00:00 am
Angelillo,

Prueba con highlight_string  ;)


Título: Re: Como puedo mostrar un codigo fuente ???
Publicado por: Azielito en 22 Abril 2008, 23:50 pm
y tambien htmlspecialchars() para que te respete los tags de html y eso por si oculas


Título: Re: Como puedo mostrar un codigo fuente ???
Publicado por: Diabliyo en 23 Abril 2008, 00:35 am
Gracias Ing_Ams y Azielito por sus propuestas, las utilizare y en seguida colgare mis resulatdos y comentarios...

De momento me gustaria tocar otro tema que va de la mano con esto mismo jejeje.. Pero esto es del lado de SEGURIDAD al momento de guardar el mensaje en la base de datos..

Actualmente tengo implementado solo esto:

1- Se muestra el formulario (titulo, mensaje).
2- El usuario rellena los INPUT y pulsa ENVIAR.
3- Dentro del code en la parte de guardar el mensaje en la BDD, tengo lo siguiente:

Código:
<?php
$msg= msg2caritas( $_POST["mensaje_noticia"] ); //de CODIGO a CARITAS  :D --> <img ...
$msg= msg2msgtags( $msg ); //de BBCode a HTML Tags  [b] --> <b>

//generamos array de insercion mysql
$valores= array(
"autor"=>"'". $_SESSION["log_usr"]. "'",
"titulo"=>"'". $_POST["titulo_noticia"]. "'",
"mensaje"=>"'". htmlentities($msg, ENT_QUOTES). "'",
"fecha"=>"'". time(). "'",
"menu"=>"'". $buf_menu["NOMBRE"]. "'",
"sección"=>"'". $buf_sec["NOMBRE"]. "'" );

if( insertar_bdd( "NOTICIAS", $valores )==0 )
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>

Posteriormente en la parte de Modificaciones el usuario al intentar modificar el mensaje colgado anteriormente, le muestra el mensaje pero de forma distinta :(, ya que los SALTOS DE LINEA son cambiados por <br> por la funcion htmlentities() :'(, la unica seria quitar la funcion htmlentities() al momento de insertar, el problema es que si el usuario redacta un mensaje que contenga un simbolo como este: ' (comilla simple), da error al momento de insertar :S, asi que se debe conservar esta funcion :)

Mis preguntas son:

1- Lo implementado para la INSERCION de los datos, es lo mas seguro y viable ??
2- Que puedo hacer al respecto en el momento de MODIFICACION de un mensaje anterior y se muestre normal (no muestre <BR>, que muestre los saltos normla)???

Estuve pensando en pasarle la funcion html_entity_decode( $msg, ENT_QUOTES );, y despues pasarle las funciones que hice para convertir de codigo HTML a BBCode o Caracteres especiales !!.. Pero esperare opiniones :D

De antemano gracias por la atencion!!

bye bye


Título: Re: Como puedo mostrar un codigo fuente ???
Publicado por: Libransser en 24 Abril 2008, 07:05 am
Así es, para lo que se refiere a campos que tengas que editar en su forma original, simplemente tienes invertir las operaciones que realizaste sobre su contenido. En este caso aplicando el html_entity_decode como ya mencionaste.

Posiblemente también sea conveniente que realices algún tipo de validación sobre la variable $_POST["titulo_noticia"], ya que si en el campo del título ponen una comilla simple, también te dará problemas al insertarlo en la base de datos. Y quizá también sobre las variables $buf_menu["NOMBRE"] y $buf_sec["NOMBRE"], pero eso depende de dónde vengan, que es lo que no se nota en el código.

Arwing
            


Título: Re: Como puedo mostrar un codigo fuente ???
Publicado por: Diabliyo en 24 Abril 2008, 15:27 pm
Así es, para lo que se refiere a campos que tengas que editar en su forma original, simplemente tienes invertir las operaciones que realizaste sobre su contenido. En este caso aplicando el html_entity_decode como ya mencionaste.

Posiblemente también sea conveniente que realices algún tipo de validación sobre la variable $_POST["titulo_noticia"], ya que si en el campo del título ponen una comilla simple, también te dará problemas al insertarlo en la base de datos. Y quizá también sobre las variables $buf_menu["NOMBRE"] y $buf_sec["NOMBRE"], pero eso depende de dónde vengan, que es lo que no se nota en el código.

Arwing
            

Jojojo fuck... tocaste un punto importante que se me habia pasado, las variables:$_POST["titulo_noticia"], $buf_menu["NOMBRE"] y $buf_sec["NOMBRE"], a estas las insertaba directo sin pasarle el htmlentities() :S, pero bueno, gracias por la informacion y el tip :D !!...

Aun queda pendiente lo del uso de htmlspecialchars() y highlight_string(), mas tarde pongo los resultados :D !!