Foros del Web » Programando para Internet » PHP »

[Aporte] Resaltar las porciones de código que están entre etiquetas

Estas en el tema de [Aporte] Resaltar las porciones de código que están entre etiquetas en el foro de PHP en Foros del Web. Parecido a lo que hace este foro cuando usamos los highlight @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ...
  #1 (permalink)  
Antiguo 06/03/2010, 06:18
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
[Aporte] Resaltar las porciones de código que están entre etiquetas

Parecido a lo que hace este foro cuando usamos los highlight

Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  5. <title></title>
  6. <style type="text/css">
  7. .contenedor {
  8. background: #EEEEEE;
  9. border:1px solid rgb(120,120,120);
  10. width:400px;
  11. overflow:auto;
  12. }
  13.  
  14. #lenguaje {
  15. background: orange;
  16. font: 12px verdana;
  17. color: #000000;
  18. padding-left: 4px;
  19. width:100px;
  20. height:18px;
  21. }
  22.  
  23. .contenido1, .contenido2 {
  24. font: 12px monospace;
  25. color: #000000;
  26. padding-top: 1px;
  27. padding-bottom: 1px;
  28. }
  29.  
  30. .contenido1 {
  31. background: #FFFFFF;
  32. }
  33.  
  34. .contenido2 {
  35. background: transparent;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <?php
  41. function EnvuelveCod($cadena) {
  42. // Cambia caracteres especiales por sus entidades HTML
  43. $cadena = htmlspecialchars($cadena);
  44. $cadena = str_replace("{", "{", $cadena);
  45. $cadena = str_replace("}", "}", $cadena);
  46. $cadena = str_replace("$", "$", $cadena);
  47. $cadena = str_replace("%", "%", $cadena);
  48. $cadena = str_replace("(", "(", $cadena);
  49. $cadena = str_replace(")", ")", $cadena);
  50. $cadena = str_replace("\\", "\", $cadena);
  51. $cadena = str_replace("|", "|", $cadena);
  52. $cadena = str_replace("?", "?", $cadena);
  53. $cadena = str_replace("&#191;", "&iquest;", $cadena);
  54. $cadena = str_replace("!", "!", $cadena);
  55. $cadena = str_replace("+", "+", $cadena);
  56. $cadena = str_replace("*", "*", $cadena);
  57. $cadena = str_replace(",", ",", $cadena);
  58. $cadena = str_replace("-", "-", $cadena);
  59. $cadena = str_replace("_", "_", $cadena);
  60. $cadena = str_replace("=", "=", $cadena);
  61. $cadena = str_replace("'", "'", $cadena);
  62. $cadena = str_replace(".", ".", $cadena);
  63. $cadena = str_replace("^", "^", $cadena);
  64. $cadena = str_replace("¡","&iexcl;", $cadena);
  65. $cadena = str_replace("ñ","&ntilde;", $cadena);
  66. $cadena = str_replace("Ñ","&Ntilde;", $cadena);
  67. $cadena = str_replace("á","&aacute;", $cadena);
  68. $cadena = str_replace("Á","&Aacute;", $cadena);
  69. $cadena = str_replace("é","&eacute;", $cadena);
  70. $cadena = str_replace("É","&Eacute;", $cadena);
  71. $cadena = str_replace("í","&iacute;", $cadena);
  72. $cadena = str_replace("Í","&Iacute;", $cadena);
  73. $cadena = str_replace("ó","&oacute;", $cadena);
  74. $cadena = str_replace("Ó","&Oacute;", $cadena);
  75. $cadena = str_replace("ú","&uacute;", $cadena);
  76. $cadena = str_replace("Ú","&Uacute;", $cadena);
  77. $cadena = str_replace('&quot;','"', $cadena);
  78.  
  79.  
  80. // Reemplaza los corchetes por entidades cuendo no equivalen a las etiquetas de código
  81. $patron1 = "/\[(?!(\/*)code)(.*)(\])/i";
  82. $RempCorchete = preg_replace($patron1, "[$2]", $cadena);
  83.  
  84. // Este reemplazo hay que hacerlo aquí, para que no afecte al cierre de las etiquetas
  85. $RempCorchete = str_replace("/", "/", $RempCorchete);
  86.  
  87. // Reemplaza las etiquetas de código por el caracter "|". Se puede escoger cualquier otro caracter
  88. $patron2 = "/(\r?[^a-z0-9&]?\[.*?\]\r?[^a-z0-9&]?)/i";
  89. $RempEtiquetas = preg_replace($patron2, "|", $RempCorchete);
  90.  
  91. // Reemplaza las etiquetas de códogo y todo el texto que no está envuelto en ellas.
  92. // Solo mantenemos el lenguaje (atributo) de las etiquetas en caso que lo tengan y se le añade el caracter "|" .
  93. // Se puede escoger cualquier otro caracter
  94. $patron3 = '/([^\[]*)(\[(?:[^"\]]+))(["]?)(\s*)(.*?)\4\3(\][^\[]*)(\[[^\[]+)/i';
  95. $RempLengaje = preg_replace($patron3, "$5|", $RempCorchete);
  96.  
  97. // Separamos el lenguaje
  98. $arrlang = explode("|", trim($RempLengaje));
  99.  
  100. $contador = 0;
  101.  
  102. // Este reemplazo hay que hacerlo aquí
  103. $RempEtiquetas = str_replace('"', '&quot;', $RempEtiquetas);
  104. //$RempEtiquetas = htmlspecialchars($RempEtiquetas);
  105.  
  106. // Separamos el texto plano del código
  107.  $arretiqueta = explode("|", $RempEtiquetas);
  108.  
  109.             $enumeraYcolorea_linea = "";
  110.  
  111.     for ($n=0; $n < sizeof($arretiqueta); $n++) {
  112.  
  113.         // Es texto plano
  114.         if ($n % 2 == 0 ) {
  115.             $enumeraYcolorea_linea .=  $arretiqueta[$n];
  116.         //Es código
  117.         } else {
  118.        
  119. // En la etiqueta de código no se especifica lenguaje
  120.             if (($arrlang[$contador] == "") || ($arrlang[$contador] == null)) {
  121.             $encabezado = "";
  122.              // Se especifica lenguaje
  123.             } else {
  124.             $encabezado = '<div id="lenguaje">' .$arrlang[$contador]. '</div>';
  125.             }
  126. $contador += 1;
  127.              $enumeraYcolorea_linea .= '<pre><div class="contenedor">' .$encabezado. '<ol type="1">';
  128.              $array_codigo = explode("\n", trim( $arretiqueta[$n])); // Dividimos cada linea de código
  129.  
  130.             for ($i=0; $i < sizeof($array_codigo); $i++) {
  131.  
  132.                 $resto = (abs($i) % 2);
  133.                 switch ($resto) { // Coloreamos cada linea
  134.                         case 0: $estilo = "contenido1"; break;
  135.                         case 1: $estilo = "contenido2"; break;
  136.                 }
  137.  
  138.             $enumeraYcolorea_linea .= '<li class="'.$estilo.'">' . $array_codigo[$i]. '</li>';
  139.  
  140.             }
  141.             $enumeraYcolorea_linea .= '</ol></div></pre>';
  142.         }
  143.     }
  144.  
  145.  
  146. // Reemplamos los saltos de linea
  147. $strTemp = preg_replace("/\n/", "<br />", $enumeraYcolorea_linea);
  148.  
  149. return $strTemp;
  150. }
  151. // Función para subir a la bd el html generado
  152. echo EnvuelveCod(Trim(stripslashes($_POST["txtarea"])));
  153. // Recibe el html de la bd
  154. //echo stripslashes(campo);
  155. ?>
  156. </body>
  157. </html>


Uso

Código:
Código montado por [Adler]
[c o d e="javascript"]funcion funcion() {
document.write ("hola");
}[/c o d e]

Las etiquetas de código pueden contener el lenguaje usado o no

[c o d  e="php"]<?php
$arr = Array(1,2,3,"a");
echo $arr[0];
?>
[/c o d e]
[c o d e]<%
Dim bienvenida
bienvenida = "mundo"
response.write "hola" & bienvenida
%>
[/c o d e]

También podemos hacer que no se ejecuten las entidades HTML

[c o d e="php"]
<?php
$cadena = str_replace("<", "&lt;", $cadena);
$cadena = str_replace(">", "&gt;", $cadena);
$cadena = str_replace("{", "& #123;", $cadena);
$cadena = str_replace("}", "& #125;", $cadena);
$cadena = str_replace("$", "& #36;", $cadena);
$cadena = str_replace("%", "& #37;", $cadena);
$cadena = str_replace("(", "& #40;", $cadena); 
$cadena = str_replace(")", "& #41;", $cadena);
$cadena = str_replace("\\", "& #92;", $cadena);
$cadena = str_replace("|", "& #124;", $cadena);
$cadena = str_replace(":", "& #58;", $cadena);
$cadena = str_replace("?", "& #63;", $cadena);
$cadena = str_replace("¿", "&iquest;", $cadena);
$cadena = str_replace("!", "& #33;", $cadena);
$cadena = str_replace("+", "& #43;", $cadena);
$cadena = str_replace("*", "& #42;", $cadena);
$cadena = str_replace(",", "& #44;", $cadena);
$cadena = str_replace("-", "& #45;", $cadena);
$cadena = str_replace("_", "& #95;", $cadena);
$cadena = str_replace("=", "& #61;", $cadena);
$cadena = str_replace("'", "& #39;", $cadena);
$cadena = str_replace(".", "& #46;", $cadena);
$cadena = str_replace("^", "& #94;", $cadena);
$cadena = str_replace("¡","&iexcl;", $cadena);
$cadena = str_replace("ñ","&ntilde;", $cadena);
$cadena = str_replace("Ñ","&Ntilde;", $cadena);
$cadena = str_replace("á","&aacute;", $cadena);
$cadena = str_replace("Á","&Aacute;", $cadena);
$cadena = str_replace("é","&eacute;", $cadena);
$cadena = str_replace("É","&Eacute;", $cadena);
$cadena = str_replace("í","&iacute;", $cadena);
$cadena = str_replace("Í","&Iacute;", $cadena);
$cadena = str_replace("ó","&oacute;", $cadena);
$cadena = str_replace("Ó","&Oacute;", $cadena);
$cadena = str_replace("ú","&uacute;", $cadena);
$cadena = str_replace("Ú","&Uacute;", $cadena);
?>
[/c o d e]

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 06/03/2010 a las 06:27 Razón: Las etiquetas de code y algunas etiquetas html están separadas para que este foro no las ejecute
  #2 (permalink)  
Antiguo 06/03/2010, 08:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [Aporte] Resaltar las porciones de código que están entre etiquetas

y porque no usar highlight_string()
http://php.net/highlight_string
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/03/2010, 08:23
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: [Aporte] Resaltar las porciones de código que están entre etiquetas

Además esta cadena está mala :

Código PHP:
Ver original
  1. $cadena = str_replace("\\", "\", $cadena);

Pero se agradece el aporte.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: etiquetas, resaltar, aportes
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 12:05.