Crear la etiqueta CODE en mi propio codigo !!

Iniciado por Diabliyo, 2 Junio 2008, 21:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Hola:

Estoy terminando un sistema personal y me encuentro atorado en la parte de mostrar noticias, en especifico la parte cuando queremos mostrar codigos o texto de algun lenguaje de programacion utilizando las etiquetas CODE, pero por mas que lo intengo no logro imprimir bien algunas cosas...

El proceso que realizo para guardar la noticia de una forma muy resumida es:

OJO: register_globals= Off asi esta mi php.ini configuado.

<?php
switch( $buf_sec["TIPO"] ) //dependiendo el tipo de mensaje/noticia a colgar, es el modo
{
case 'noticia':
$msgstrip_tags($_POST["mensaje_noticia"]); //eliminamos etiquetas HTML
$msgmsg2caritas$msg ); //de CODIGO a CARITAS, Ejm: :D => <img src="blabla">
$msgmsg2msgtags$msg ); //de BBCode a HTML Tags, Ejm: [b] => <b>

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

unset($msg);

if( insertar_bdd"NOTICIAS"$valores )==//insertamos a la BDD la trama
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
break;
//otros case...
}
?>


Para mostrar la noticia al publico es (de forma resumida):

<?php
//en una funcion anterior se reviso la validez y seguridad de la variable
//que actualmente esta pasandose como argumento con el  nombre de 'id_tmp'

$consconsultar_con"NOTICIAS""ID='"$id_tmp"'" );
$tmpmysql_fetch_array($cons);

$fechadate"j"$tmp["FECHA"] ). " de ";
$fecha .= mes_esp(date"m"$tmp["FECHA"] )). " del "//el mes en espanol
$fecha .= date"Y"$tmp["FECHA"] ). " a las ";
$fecha .= date"g:i a"$tmp["FECHA"] );

$com_conconsultar_con"SECCIONES""NOMBRE='"$tmp["sección"]. "':RELACION='"$tmp["MENU"]. "'" );
$commmysql_fetch_array($com_con);

echo 
"<th colspan=\"2\"><a href=\"index.php?hoja="$tmp["ID"]. "\" alt=\""$tmp["TITULO"]. "\" title=\""$tmp["TITULO"]. "\">"$tmp["TITULO"]. "</a></th><tr>";
echo 
"<td><div id=\"datos_publicacion\">Publicado por ";
echo 
"<a href=\"mailto:"consultar_datos_usuario$tmp["AUTOR"], "email" ). "\" alt=\""consultar_datos_usuario$tmp["AUTOR"], "email" ). "\" title=\""consultar_datos_usuario$tmp["AUTOR"], "email" ). "\">";
echo 
"<b>"$tmp["AUTOR"]. "</b></a> el "$fecha"</div></td><tr>";
echo 
"<td>"html_entity_decode($tmp["MENSAJE"], ENT_QUOTES). "</td>";

ver_comentarios_thtd$comm["COMENTARIOS"], $tmp["ID"], $id_tmp );
echo 
"<tr>";

unset(
$cons);
unset(
$id_tmp);
?>


La funcion de msg2msgtags:

<?php
function msg2msgtags$mensaje )
{
/*
strchr( lugar, palabraclave )  busca la "palabraclave" en "lugar"
str_replace( palabraclave, sustituto, lugar )  busca en "lugar" la "palabraclave" y la sustituye por "sustituto"
*/
if( strchr$mensaje"[b]" ) &&  strchr$mensaje"[/b]" ) )
{
$mensajestr_replace"[b]""<b>"$mensaje );
$mensajestr_replace"[/b]""</b>"$mensaje );
}
if( strchr$mensaje"[i]" ) &&  strchr$mensaje"[/i]" ) )
{
$mensajestr_replace"[i]""<i>"$mensaje );
$mensajestr_replace"[/i]""</i>"$mensaje );
}
if( strchr$mensaje"[u]" ) &&  strchr$mensaje"[/u]" ) )
{
$mensajestr_replace"[u]""<u>"$mensaje );
$mensajestr_replace"[/u]""</u>"$mensaje );
}
if( strchr$mensaje"[center]" ) &&  strchr$mensaje"[/center]" ) )
{
$mensajestr_replace"[center]""<center>"$mensaje );
$mensajestr_replace"[/center]""</center>"$mensaje );
}
if( strchr$mensaje"[img]" ) &&  strchr$mensaje"[/img]" ) )
{
$mensajestr_replace"[img]""<img class=\"img_post\" src=\""$mensaje );
$mensajestr_replace"[/img]""\">"$mensaje );
}
if( strchr$mensaje"[code]" ) ||  strchr$mensaje"
" ) )
      {
      $mensaje= str_replace( "", "<div id=\"etiqueta_code\">", $mensaje );
$mensaje= str_replace( "
", "</div>", $mensaje );
      }
   if( strchr( $mensaje, "\n" ) )
      {
      $mensaje= str_replace( "\n", "<br>", $mensaje );
      }
   if( strchr( $mensaje, "<script>" ) )
      {
      $mensaje= str_replace( "<script>", htmlentities( "<script>", ENT_QUOTES ), $mensaje );
      }
   if( strchr( $mensaje, "</script>" ) )
      {
      $mensaje= str_replace( "</script>", htmlentities( "</script>", ENT_QUOTES ), $mensaje );
      }
   /*if( strchr( $mensaje, "" ) &&  strchr( $mensaje, "" ) )
      {
      $mensaje= str_replace();
      $mensaje= str_replace();
      }*/
   return $mensaje;
   }
?>[/code]

El estilo de la etiqueta #etiqueta_code en mi css es:

#etiqueta_code
{
background-color:yellow;
width:390px;
padding:3px 5px 3px 5px;margin-left:5px;
}

Diabliyo

Al final de todo, al publicar el mensaje se come esto:

- Si el texto/codigo tiene TABULARES, los elimina.
- Si el texto/codigo tiene ESPACIOS extra, los elimina.
- Si el codigo es programa en C, elimina las cabeceras que esten declaradas asi: < cabecera >
- Solo se puede imprimir una cabecera de codigo C, mediante la inclucion asi: include "cabecera"

Alguna idea ?

SirLanceCC

debes reemplazar los espacios con &nbsp;
reemplazar los < y > por &lt; y &gt; respectivamente o usar alguna función como html_entities()
...
el tabulador podrías reemplazarlo por 4 espacios &nbsp;

Diabliyo

Cita de: SirLanceCC en  2 Junio 2008, 21:51 PM
debes reemplazar los espacios con &nbsp;
reemplazar los < y > por &lt; y &gt; respectivamente o usar alguna función como html_entities()
...
el tabulador podrías reemplazarlo por 4 espacios &nbsp;

Lo del remplazo de los espacios por &nbsp y los < > por &lt; &gt seria en la funcion msg2mstags() que utilizo ??... o en que parte del codigo serua conveniente invocar eso ??

Hans el Topo

cuando se tiene dudas sobre funciones y demás se va a la fuente que es www.php.net
para convertir carácteres html especiales http://es2.php.net/manual/es/function.htmlspecialchars.php

para salvar las comillas con el magic_quote off
http://es2.php.net/manual/es/function.addslashes.php


si quieres agregar la etiqueta code existe una librería bastante útil que coloreará y dará formato por ti

syntax highlight

te paso un tutorial que hice de como implementarla en blogger (la instalación es genérica a cualquier sitio) en donde explica como personalizar la instalación/dependencias
Tutorial