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?