Foros del Web » Programando para Internet » PHP »

SOLUCIONADO--Problema con las comillas simples BBCode

Estas en el tema de SOLUCIONADO--Problema con las comillas simples BBCode en el foro de PHP en Foros del Web. He hecho una página web bilingüe (en valenciano y es español), en dicha página he creado un panel de control para actualizar el contenido, con ...
  #1 (permalink)  
Antiguo 09/01/2007, 02:14
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
SOLUCIONADO--Problema con las comillas simples BBCode

He hecho una página web bilingüe (en valenciano y es español), en dicha página he creado un panel de control para actualizar el contenido, con un formulario, el problema radica que en la version valenciano al poner la comilla simple (') para hacer el apostrofe (por ejemplo: l'agencia) no se guarda el formulario en la base de datos, y eso claro esta que es BBCode y no se que modificar.

Como puedo subsanar dicha cosa? para que se pueda poner la comilla simple sin problema??

Muchas gracias!

Última edición por alllebor; 09/01/2007 a las 05:17
  #2 (permalink)  
Antiguo 09/01/2007, 03:23
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

Hola alllebor. No entiendo bien tu problema ya que, acabo de confeccionar el siguiente script y no encuentro problema con la comilla:

La tabla:
--
-- Estructura de tabla para la tabla `mitabla`
--

DROP TABLE IF EXISTS `mitabla`;
CREATE TABLE `mitabla` (
`id` tinyint(11) unsigned NOT NULL auto_increment,
`descripcion` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;

insertar_comillas.php
Código PHP:
<?
$link 
mysql_connect('localhost','pepe','pepe');
mysql_select_db('dbangel',$link) or die('No pudo seleccionarse la BD.');


if (
$_POST)
{
    
$descripcion=$_POST["descripcion"];

    
//-lo inserto
    
$ssql "INSERT INTO mitabla (descripcion) 
            VALUES ('"
.$descripcion."') ";
    
mysql_query($ssql,$link) or die('Error en insert mitabla'.mysql_error());
}
echo 
'<br>Listado<br>';
$result mysql_query("SELECT * FROM mitabla ",$link);
while(
$row mysql_fetch_array($result)) {

    
// Código para cada fila
    
echo "<br>$row[id] $row[descripcion]";
}
mysql_free_result($result);
mysql_close($link);

?>

<hr>

<form name=f1 action="insertar_comillas.php" method="post" />
    <br>Descripcion: <input type="text" name="descripcion" size="50" value="" />
    <br><input type="submit" value=" Enviar " style="margin-top: 5ex;" />
</form>
Tras ejecutarlo varias veces, este es el resultado:
Cita:
Listado

1 primero
2 segundo
3 y este es el tercero
4 ahora l'agencia
5 este es otro con acénto
6 de nuevo l'agencia
7 Esta es L'agencia y l'agencia
8 es bilingüe
Un saludo.
  #3 (permalink)  
Antiguo 09/01/2007, 04:11
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

Hola holahola de nuevo! Pues en mi formulario tengo un campo (campo "cuerpo") de texto y utilizo BBCode para modificar el texto (poner negrita, cursiva, links, etc) El problema que si pongo una comilla simple (ejemplo: l'agencia) no me da ningu error pero tampoco se me inserta en la base de datos.
Aqui tienes el formulario
Código HTML:
<head>
<script src="bbcode/bbcode.js"></script>

</head>
<body onload="init('cuerpo')">
<form  method="post" action="procesar.php" enctype="multipart/form-data" al>
            <table align="center" width="640" height="114">
                <tr>
                  <td width="73"><div align="right"><strong>T&iacute;tol</strong>:</div></td>
                  <td width="555"><input type="text" name="titulo" size="100" maxlength="255" /></td>
                </tr>
                <tr>
                  <td height="54"><div align="right"><strong>Cos:</strong></div></td>
                  <td><textarea id="cuerpo" name="cuerpo" cols="70" rows="5" ></textarea></td>
                </tr>
                <td><div align="right"><strong>Imatge</strong>: </div></td>
              <td><input type="file" name="imagen"  id="imagen" size="80"  /></td>
                </tr>
              </table>
              <div align="center">
                <p>
                  <input type="submit" name="accion" value="Insertar"/>
                </p>
              </div>
          </form>
</body> 
Sabes ya lo que te digo? En el campo "cuerpo" es donde tengo el problema al poner en mi texto alguna comilla simple.
Quieres ver codigo del script del BBcode??
En el campo del formulario titulo que no se procesa por BBcode no tengo ningun problema.
Gracias por tu interes!!
  #4 (permalink)  
Antiguo 09/01/2007, 04:13
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

bueno te pongo el codigo de bbcode.php

Código PHP:
<?php
function bbcode($texto) {
    
$texto nl2br(htmlentities($texto));
    
$textostripslashes($texto);
    
$texto str_replace("[code]""<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#FFFFFF;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">[code]"$texto);
    
$texto str_replace("[/code]""[/code]<br /></div></div></td></tr></table>"$texto);
     
$texto str_replace('&quot;','"',$texto); 
    
$simple_search = array('/\[\|x\|\]/is','/\[\=p\]/is','/\[\;\)\]/is','/\[\:o\]/is','/\[\:\)\]/is','/\[\:s\]/is','/\[&lt;8\]/is','/\[d\=\]/is','/\[\:Q\]/is','/\[\:D\]/is','/\[\:\(\]/is','/\[8\)\]/is','/\[\:_o\]/is','/\[\:\|\]/is','/\[quote\](.*?)\[\/quote\]/is','/\[b\](.*?)\[\/b\]/is','/\[i\](.*?)\[\/i\]/is','/\[u\](.*?)\[\/u\]/is','/\[a href\=(.*?)\](.*?)\[\/a\]/is','/\[img src\=(.*?)\]/','#\[code\](.*?)\[\/code\]#se'); 
    
$simple_replace = array('<img src="bbcode/emoticons/e14.gif">','<img src="bbcode/emoticons/e12.gif">','<img src="bbcode/emoticons/e10.gif">','<img src="bbcode/emoticons/e8.gif">','<img src="bbcode/emoticons/e6.gif">','<img src="bbcode/emoticons/e2.gif">','<img src="bbcode/emoticons/e13.gif">','<img src="bbcode/emoticons/e11.gif">','<img src="bbcode/emoticons/e9.gif">','<img src="bbcode/emoticons/e7.gif">','<img src="bbcode/emoticons/e5.gif">','<img src="bbcode/emoticons/e1.gif">','<img src="bbcode/emoticons/e3.gif">','<img src="bbcode/emoticons/e4.gif">',"<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#EEEFDC;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">$1<br /></div></div></td></tr></table>",'<strong>$1</strong>','<em>$1</em>','<u>$1</u>','<a target=\"_blank\" href=$1>$2</a>','<img src=$1 alt=$1 />',"highlight_string(stripslashes(html_entity_decode(str_replace('<br />','','$1'))), true)");
    
$texto preg_replace ($simple_search$simple_replace$texto); 
    return 
$texto

?>
  #5 (permalink)  
Antiguo 09/01/2007, 04:19
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

Vale. Como me has pasado tu bbcode, lo voy a probar.

Pero se me ocurre que la solución podría estar en que, dentro de la función bbcode, lo primero hagas un replace de las comillas (') por un caracter raro (por ejemplo $$$).

luego lo último que tiene que hacer tu función, antes de salir, es lo contrario.

Voy a probarlo. Un saludo.
  #6 (permalink)  
Antiguo 09/01/2007, 04:23
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

no se si te funcionara! te falta mas archivos de bbcode para que funcione

Aqui te paso el la carpeta bbcode donde la tienes ke poner donde se tienes el archivo. descargar
  #7 (permalink)  
Antiguo 09/01/2007, 04:32
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

Ya he visto el problema. Te destroza la sentencia sql.

Yo creo es digno de estudio y me voy a poner a ello. Cuando tenga algo, te digo.
  #8 (permalink)  
Antiguo 09/01/2007, 04:35
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

OK!! Muchas gracias holhola! por donde hsa visto el problema? y voy mirando a ver que saco.
  #9 (permalink)  
Antiguo 09/01/2007, 04:46
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

Estoy probando con la misma tabla que te dije al principio.

Y estoy utilizando el siguiente script:

editarseleccionado_comillas.php
Código PHP:
<?
$link 
mysql_connect('localhost','pepe','pepe');
mysql_select_db('dbangel',$link) or die('No pudo seleccionarse la BD.');


if (
$_POST)
{
    
$descripcion=$_POST["descripcion"];
    
$id=$_POST["id"];

    
//-bbcode
    
$descripcion=bbcode($descripcion);
    echo 
'<br>Descripción después del bbcode: '.$descripcion;

    
//-lo inserto
    
$ssql="UPDATE mitabla SET descripcion = '".$descripcion."'  
    WHERE id="
.$id." ";
    echo 
'<br>El update es: '.$ssql;

    
mysql_query($ssql,$link) or die('Error en UPDATE mitabla'.mysql_error());
}

echo 
'<br>Listado<br>';
$result mysql_query("SELECT * FROM mitabla ",$link);
while(
$row mysql_fetch_array($result)) {

    
// Código para cada fila
    
echo "<br> <a href=editarseleccionado_comillas.php?id=$row[id]>Edito</a> $row[id] $row[descripcion]";
}
mysql_free_result($result);

if (
$_GET)
{
    
//-voy a editar uno de los que tienen comilla y presentarlo en el formulario
    
$id=$_GET[id];
    
$result mysql_query("SELECT * FROM mitabla WHERE id=$id ",$link);
    
$row mysql_fetch_array($result);
    
$descripcion=$row["descripcion"];

    
mysql_close($link);

?>

    <hr>

    <form name=f1 action="editarseleccionado_comillas.php" method="post" />
        <br>Descripcion: <input type="text" name="descripcion" size="50" value="<?echo $descripcion?>" />
        <input type="hidden" name="id" value="<?echo $id?>" />
        <br><input type="submit" value=" Enviar " style="margin-top: 5ex;" />
    </form>

<?
}

function 
bbcode($texto) {
    
$texto nl2br(htmlentities($texto));
    
$textostripslashes($texto);
    
$texto str_replace("[code]""<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#FFFFFF;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">[code]"$texto);
    
$texto str_replace("[/code]""[/code]<br /></div></div></td></tr></table>"$texto);
     
$texto str_replace('&quot;','"',$texto); 
    
$simple_search = array('/\[\|x\|\]/is','/\[\=p\]/is','/\[\;\)\]/is','/\[\:o\]/is','/\[\:\)\]/is','/\[\:s\]/is','/\[&lt;8\]/is','/\[d\=\]/is','/\[\:Q\]/is','/\[\:D\]/is','/\[\:\(\]/is','/\[8\)\]/is','/\[\:_o\]/is','/\[\:\|\]/is','/\[quote\](.*?)\[\/quote\]/is','/\[b\](.*?)\[\/b\]/is','/\[i\](.*?)\[\/i\]/is','/\[u\](.*?)\[\/u\]/is','/\[a href\=(.*?)\](.*?)\[\/a\]/is','/\[img src\=(.*?)\]/','#\[code\](.*?)\[\/code\]#se'); 
    
$simple_replace = array('<img src="bbcode/emoticons/e14.gif">','<img src="bbcode/emoticons/e12.gif">','<img src="bbcode/emoticons/e10.gif">','<img src="bbcode/emoticons/e8.gif">','<img src="bbcode/emoticons/e6.gif">','<img src="bbcode/emoticons/e2.gif">','<img src="bbcode/emoticons/e13.gif">','<img src="bbcode/emoticons/e11.gif">','<img src="bbcode/emoticons/e9.gif">','<img src="bbcode/emoticons/e7.gif">','<img src="bbcode/emoticons/e5.gif">','<img src="bbcode/emoticons/e1.gif">','<img src="bbcode/emoticons/e3.gif">','<img src="bbcode/emoticons/e4.gif">',"<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#EEEFDC;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">$1<br /></div></div></td></tr></table>",'<strong>$1</strong>','<em>$1</em>','<u>$1</u>','<a target=\"_blank\" href=$1>$2</a>','<img src=$1 alt=$1 />',"highlight_string(stripslashes(html_entity_decode(str_replace('<br />','','$1'))), true)");
    
$texto preg_replace ($simple_search$simple_replace$texto); 
    return 
$texto
}

?>
Este código lo he ejecutado asteriscando la parte de bbcode y funciona corretamente. Pero, si se ejecuta tal cual está, sólo funciona cuando el nº de comillas simples que contiene es par, por el contrario te destroza el update.

Yo creo que puede tener solución pero hay que verlo. Un saludo.


EDITO:
-----------------
Perdona pero estaba dando errores porque había comenzado a hacer modificaciones. Creo que este es el script correcto.
-----------------

Última edición por holahola; 09/01/2007 a las 04:50 Razón: corrección script en comillas
  #10 (permalink)  
Antiguo 09/01/2007, 04:51
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

Veo chunga la cosa! maldito bbcode (jejeje) estoy por decirles a los clientes que en vez de utilizar la comilla simple(') pongan un acento (´) pero seguro que no se acostumbran y se acordaran de mi y de mi familia,jejejeje
  #11 (permalink)  
Antiguo 09/01/2007, 05:03
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

Hola. Pues a mí me funciona bien con el siguiente arreglo. Como te he dicho he hecho lo de cambiarlo por un signo raro y luego lo he vuelto a recuperar.

Al menos con el código que te que puesto.

La única modificación que le he hecho es a la función que me pasaste de bbcode, que quedaría así.

Código PHP:
function bbcode($texto) {
    
$texto str_replace("'""$$$"$texto);

    
$texto nl2br(htmlentities($texto));
    
$textostripslashes($texto);
    
$texto str_replace("[code]""<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#FFFFFF;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">[code]"$texto);
    
$texto str_replace("[/code]""[/code]<br /></div></div></td></tr></table>"$texto);
     
$texto str_replace('&quot;','"',$texto); 
    
$simple_search = array('/\[\|x\|\]/is','/\[\=p\]/is','/\[\;\)\]/is','/\[\:o\]/is','/\[\:\)\]/is','/\[\:s\]/is','/\[&lt;8\]/is','/\[d\=\]/is','/\[\:Q\]/is','/\[\:D\]/is','/\[\:\(\]/is','/\[8\)\]/is','/\[\:_o\]/is','/\[\:\|\]/is','/\[quote\](.*?)\[\/quote\]/is','/\[b\](.*?)\[\/b\]/is','/\[i\](.*?)\[\/i\]/is','/\[u\](.*?)\[\/u\]/is','/\[a href\=(.*?)\](.*?)\[\/a\]/is','/\[img src\=(.*?)\]/','#\[code\](.*?)\[\/code\]#se'); 
    
$simple_replace = array('<img src="bbcode/emoticons/e14.gif">','<img src="bbcode/emoticons/e12.gif">','<img src="bbcode/emoticons/e10.gif">','<img src="bbcode/emoticons/e8.gif">','<img src="bbcode/emoticons/e6.gif">','<img src="bbcode/emoticons/e2.gif">','<img src="bbcode/emoticons/e13.gif">','<img src="bbcode/emoticons/e11.gif">','<img src="bbcode/emoticons/e9.gif">','<img src="bbcode/emoticons/e7.gif">','<img src="bbcode/emoticons/e5.gif">','<img src="bbcode/emoticons/e1.gif">','<img src="bbcode/emoticons/e3.gif">','<img src="bbcode/emoticons/e4.gif">',"<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><div align=\"left\" style=\"padding:5px;margin:5px;\"><div style=\" background-color:#EEEFDC;border-color:#808080;border-style:solid;border-width:1px;font-size:11px;margin:0px;overflow:auto;padding:6px;text-align:left;width:330px;\">$1<br /></div></div></td></tr></table>",'<strong>$1</strong>','<em>$1</em>','<u>$1</u>','<a target=\"_blank\" href=$1>$2</a>','<img src=$1 alt=$1 />',"highlight_string(stripslashes(html_entity_decode(str_replace('<br />','','$1'))), true)");
    
$texto preg_replace ($simple_search$simple_replace$texto); 

    
$texto str_replace("$$$""\'"$texto);


    return 
$texto

Espero que te funcione. Si no, díme algo y seguiré investigando. Un saludo
  #12 (permalink)  
Antiguo 09/01/2007, 05:10
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: Problema con las comillas simples

Gracias holhola!! eres un CRACK lo he probado y va de lujo!! Ya es la segunda vez que me salvas. Te debo una (o dos) cervecitas!!
  #13 (permalink)  
Antiguo 09/01/2007, 05:12
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Problema con las comillas simples

De nada... Yo creo que todos venimos a este estupendo foro porque necesitamos ayuda y porque además, NOS GUSTA AYUDAR.

Me alegro mucho que se te haya resuelto el problema. Dicen que todo tiene arreglo excepto la muerte, jeje.

Un saludo y hasta otra.
  #14 (permalink)  
Antiguo 09/01/2007, 05:29
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: SOLUCIONADO--Problema con las comillas simples BBCode

hohola he modificado un pokito el bbcode, ahora solo utilizo el primer str_replace lo ponga así:

$texto = str_replace("'", "\'", $texto);

Asi no tiene ke volver a hacer al final y funciona bien. Que te parece?

Gracias tio!
__________________
Quien no me pregunta no se entera!!
  #15 (permalink)  
Antiguo 09/01/2007, 05:33
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: SOLUCIONADO--Problema con las comillas simples BBCode

Pues me parece perfecto.

Yo lo había hecho al principio y al final porque así me he librado de tener que analizar todo el código intermedio. Y es algo que, cuando hay prisas por solucionar un problema es muy efectivo, te lo aseguro.

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 03:30.