Estoy intentando hacer un función que me haga de BBCode y quiero implementar la funcionalidad de crear una tabla.
Para ello he pensado que se podría hacer así:
[tabla]
[fila]Columna1Fila1 | Columna2Fila1 | Columna3Fila1[/fila]
[fila]Columna1Fila2 | Columna2Fila2 | Columna3Fila2[/fila]
[/tabla]
Todo lo que son [fila] [/fila] y patrones con 2 textos donde el valor del médio se mentiene intacto, no tengo problemas, uso la función preg_replace con 2 arrays.
El problema es que el símbolo | que separa una columna de otra debería de ser sustituido por <td></td> para el código que he programado.
La cuestión es que no se hacerlo mediante los arrays de preg_replace y pensé en usar str_replace(" | ", '</td><td>', $body);
Es aquí donde me viene el problema, la cadena " | " efectivametne se sustituye por "<td></td>, pero no en el código fuente, sino en modo de cadena, de modo que en el código fuente los <td></td> se ven así: "</td><td>6%"
¿alguna idea?
PD: uso este código, por si os vale para aclarar mi explicación anterior, el fallo está en mi primera linea:
Código PHP:
$body = str_replace(" | ", '</td><td>', $body);
$body = htmlentities($body);
$a = array(
"/\[i\](.*?)\[\/i\]/is",
"/\[b\](.*?)\[\/b\]/is",
"/\[u\](.*?)\[\/u\]/is",
"/\[t\](.*?)\[\/t\]/is",
"/\[d\](.*?)\[\/d\]/is",
"/\[url=(.*?)\](.*?)\[\/url\]/is",
"/\[v\](.*?)\[\/v\]/is",
"/\[tabla\](.*?)\[\/tabla\]/is",
"/\[fila\](.*?)\[\/fila\]/is",
"/\[fila2\](.*?)\[\/fila2\]/is",
"/\ | /is"
);
$b = array(
"<i>$1</i>",
"<b>$1</b>",
"<u>$1</u>",
"<b>$1</b><DIV STYLE=\"background-position:bottom; background-image: URL(imgs/linea.gif); background-repeat:repeat-x; height:7\"></div>",
"<blockquote><p>$1</p></blockquote>",
"<a href=\"$1\" target=\"_blank\">$2</a>",
"<a href=\"http://www.youtube.com/watch?v=$1\" target=\"_blank\"><img src='http://img.youtube.com/vi/$1/2.jpg'></a>",
"<table width=\"66%\" border=\"0\" cellspacing=\"0\" cellpadding=\"3\" class=\"bordeTabla informacion\">$1</table>",
"<tr bgcolor=\"#eeeee1\"><td>$1</td></tr>",
"<tr bgcolor=\"#ffffff\"><td>$1</td></tr>",
"<td></td>",
);
$body = preg_replace($a, $b, $body);
$body = nl2br($body);