Foros del Web » Programando para Internet » PHP »

highlight_string(), coloreado del código.

Estas en el tema de highlight_string(), coloreado del código. en el foro de PHP en Foros del Web. Una vez más escribo para pediros ayuda y es que me encontre un dilema que no se muy bien como voy a resolver. Estoy programando ...
  #1 (permalink)  
Antiguo 26/08/2004, 11:51
 
Fecha de Ingreso: agosto-2004
Mensajes: 36
Antigüedad: 13 años, 4 meses
Puntos: 0
highlight_string(), coloreado del código.

Una vez más escribo para pediros ayuda y es que me encontre un dilema que no se muy bien como voy a resolver.

Estoy programando un administrador de contenidos a traves del cual puedes insertar artículos con comentarios, borrarlos o modificarlos. En estos artículos utilizo etiquetas del tipo [code],[b],[i]... parecidas a las que usa este foro.

Al grano, al principio pense en hacer el str_replace de [code] por highlight_string(' de esta manera:

Código PHP:
<?php
    $cuerpo 
str_replace("[code]""highlight_string('"$cuerpo);
    
$cuerpo str_replace("[/code]""');"$cuerpo);
?>
Lo único que consegí fue imprimir en texto la función :/

Después de mirar varios artículos por internet llege a esta conclusión:
Código PHP:
<?php
function pretty($string)
{
  
$string split("\[code\]|\[\/code\]"$string);
  for (
$i=0;$i<count($string);$i++){
  @
highlight_string($string[$i]);
  
$string[$i] = trim($string);
  
$string[$i] = htmlspecialchars($string[$i]);
  
$string[$i] = nl2br($string[$i]);
  
$string[$i] = stripslashes($string[$i]);
  
$string[$i] = parsearTags($string[$i]);}
    
}
?>
Sí, muestra el código con colores, pero los comentarios los muestra donde va el artículo y el artículo lo muestra donde van los datos como titulo, autor, etc...

Si alguien tiene alguna idea de como hacer esto le estaría muy agradecido.
__________________
Como aquel que calla otorga y aunque la ignorancia es sorda pude levantar la voz, más fuerte que los ladridos de los perros consentidos y que la voz del pastor.

Última edición por E*M*P*I*C*A*L; 26/08/2004 a las 11:53
  #2 (permalink)  
Antiguo 27/08/2004, 11:21
 
Fecha de Ingreso: agosto-2004
Mensajes: 36
Antigüedad: 13 años, 4 meses
Puntos: 0
Conseguí que mostrara el código coloreado y en su lugar correspondiente pero no me deja parsear los tags, lo máximo que consigo es reemplazar las [b] por <b> (por poner un ejemplo), pero me imprime el código en vez de interpretarlo :/, supongo que lo hace por la función highliht_string(). ¿Cómo puedo indiarle la diferencia entre elementos del array que contienen código (solo el código que quiero colorear) y elmentos que no lo tienen?

Código PHP:
<?php
function pretty($string)
{
  
$string split("\[code\]|\[\/code\]"$string);
  for (
$x=0;$x<count($string);$x++){
  
$string[$x] = str_replace("[b]""<b>"$string[$x]);
  
$string[$x] = str_replace("[/b]""</b>"$string[$x]);
  
$string[$x] = highlight_string($string[$x]);
  echo 
"$sring[$x]";}
 }
?>
Hay algo que no soy capaz de ver...
__________________
Como aquel que calla otorga y aunque la ignorancia es sorda pude levantar la voz, más fuerte que los ladridos de los perros consentidos y que la voz del pastor.

Última edición por E*M*P*I*C*A*L; 27/08/2004 a las 11:26
  #3 (permalink)  
Antiguo 27/08/2004, 12:01
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 13 años, 5 meses
Puntos: 53
Hey, pero para que hacer ese ciclo for, y recorrer el string casilla por casilla haciendo esto:

$string[$x] = str_replace("[/b]", "</b>", $string[$x]);

Osea, eso es imposible de hacer, por que has de cuenta que eb la casilla $string[$x], nunca existira "[/b]", unicamente estara "[", me explico, lo que estas haciendo esta un poco extra~no.
  #4 (permalink)  
Antiguo 27/08/2004, 12:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 36
Antigüedad: 13 años, 4 meses
Puntos: 0
cuando hago $string = split("\[code\]|\[\/code\]", $string); divido toda la cadena en elmentos de un array, si no recorro el array entero con el bucle for solamente actuare sobre un elemento del array. count($string) me indica cuantes veces se va a repetir el bucle que sera igual a la cantidad de elementos con los que cuente el array. $x en este caso, es una variable que aumenta en 1 a cada vuelta del bucle y la uso para recoger los elementos del array, desde 0 hasta count($string). Vamos lo mismo que hacer:


$string[0] = highlight_string($string[0]);
$string[1] = highlight_string($string[1]);
$string[2] = highlight_string($string[2]);
$string[3] = highlight_string($string[3]);
...


split solo me divide la cadena en elmentos de un array pero no me dice que elemento es el que contiene [code] y cual no. Cada elemento del array es una parte del texto que no se repite.

str_replace -- Sustitiye todas las apariciones de la aguja en el pajar por la cadena. www.php.net

Por lo tanto donde exista [b] en una cadena pondrá <b> y lo hace. El problema que después le pasa la funcion highlight_string() y el código, tanto el que se encuentra con las etiquetas <?php y ?> como el html es mostrado en pantalla. Si uso la función nl2br(), me muestra los <br /> en cada salto de linea. El navegador no lo interpreta.

Si la función highlight_string() no estuviera los str_replace() funcionarian perfectamente interpretando el navegador el html que le metes con str_replace().

¿Tendre que usar un foreach en vez de un for?
__________________
Como aquel que calla otorga y aunque la ignorancia es sorda pude levantar la voz, más fuerte que los ladridos de los perros consentidos y que la voz del pastor.

Última edición por E*M*P*I*C*A*L; 27/08/2004 a las 12:39
  #5 (permalink)  
Antiguo 27/08/2004, 13:25
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 14 años, 7 meses
Puntos: 2
aqui hay algo interesante, con un par de retoques podras tenerlo lo que buscas
http://test.zero.org/vbcode/
un saludo!
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 06:28.