Foros del Web » Programando para Internet » PHP »

PDO me inserta hmtl tags en vez de acentos

Estas en el tema de PDO me inserta hmtl tags en vez de acentos en el foro de PHP en Foros del Web. Buenas a to2, Tengo un problema al insertar datos en mis tablas, uso PDO y si trato de insertar una palabra como "camión" el inserta ...

  #1 (permalink)  
Antiguo 16/02/2013, 09:34
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
PDO me inserta hmtl tags en vez de acentos

Buenas a to2,

Tengo un problema al insertar datos en mis tablas, uso PDO y si trato de insertar una palabra como "camión" el inserta
Código HTML:
Ver original
  1. "camión"
con tags html...

He mirado por ahi y mi configuracion al parecer es correcta:
Código PHP:
Ver original
  1. <?php
  2. class SPDO extends PDO
  3. {
  4.     private static $instance = null;
  5.  
  6.     public function __construct(){
  7.         $config = Config::singleton();
  8.         parent::__construct('mysql:host=' . $config->get('dbhost') . ';dbname=' . $config->get('dbname'), $config->get('dbuser'), $config->get('dbpass'),array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
  9.     }
  10.  
  11.     public static function singleton()
  12.     {
  13.         if( self::$instance == null )
  14.         {
  15.             self::$instance = new self();
  16.         }
  17.         return self::$instance;
  18.     }
  19. }
  20. ?>

Tambien he hecho var_dumps para ver como llegaba el valor por si no era problema del pdo, pero hasta el pdo llega correctamente.

Tanto la bbdd como la pagina estan en utf8.
Donde podria estar el error?

Gracias!
  #2 (permalink)  
Antiguo 16/02/2013, 14:49
 
Fecha de Ingreso: noviembre-2012
Ubicación: en casa
Mensajes: 150
Antigüedad: 11 años, 4 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por ferminako Ver Mensaje
Buenas a to2,

Tengo un problema al insertar datos en mis tablas, uso PDO y si trato de insertar una palabra como "camión" el inserta
Código HTML:
Ver original
  1. "cami&oacute;n"
con tags html...

He mirado por ahi y mi configuracion al parecer es correcta:
Código PHP:
Ver original
  1. <?php
  2. class SPDO extends PDO
  3. {
  4.     private static $instance = null;
  5.  
  6.     public function __construct(){
  7.         $config = Config::singleton();
  8.         parent::__construct('mysql:host=' . $config->get('dbhost') . ';dbname=' . $config->get('dbname'), $config->get('dbuser'), $config->get('dbpass'),array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
  9.     }
  10.  
  11.     public static function singleton()
  12.     {
  13.         if( self::$instance == null )
  14.         {
  15.             self::$instance = new self();
  16.         }
  17.         return self::$instance;
  18.     }
  19. }
  20. ?>

Tambien he hecho var_dumps para ver como llegaba el valor por si no era problema del pdo, pero hasta el pdo llega correctamente.

Tanto la bbdd como la pagina estan en utf8.
Donde podria estar el error?

Gracias!
Aver si te sirve

http://xaviesteve.com/354/acentos-y-...-8-iso-8859-1/
  #3 (permalink)  
Antiguo 16/02/2013, 15:23
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Gracias por tu ayuda pero no tiene nada q ver con mi problema, a mi me PDO me transforma los caracteres especiales en tags html
  #4 (permalink)  
Antiguo 16/02/2013, 16:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO me inserta hmtl tags en vez de acentos

PDO no es tema de MySQL, sino de PHP.

Muevo tema a Foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 16/02/2013, 16:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: PDO me inserta hmtl tags en vez de acentos

No es PDO quien inserta eso, eso sería tonto.

De seguro estás usando la función htmlentities() o htmlspecialchars() en algún lado de tus scripts, tal vez cuando recibes el formulario, tal vez intentando "limpiar por seguridad" o cualquier cosa así.

Y aquí lo imposible es adivinar en que parte del código haces eso, porque ningún lenguaje de programación hace cosas sin que tu le indiques, usa tu sentido común.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 16/02/2013, 18:19
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Seguramente el problema venga ligado al encoding, podrías mostrar la parte donde realizas el insert en la tabla? Porque en el código donde citaste no veo que estés realizando la inserción. No es un tema de conexión a la base, salvo que tampoco te esté funcionando la inserción, por lo que entiendo tu falla está en que te inserta algo no deseado.
¿Es así?
  #7 (permalink)  
Antiguo 16/02/2013, 19:48
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Aqui va, recibo los parametros x post:
Código PHP:
Ver original
  1. $countPost = count($_POST);
  2.                 $nombre_campo = array_keys($_POST);
  3.                 $valor = array_values($_POST);
  4.                 for($i=0;$i<$countPost;$i++){
  5.                     $$nombre_campo[$i]=$valor[$i];
  6.                 }

Una vez recogidos monto una query para insertar:
Código PHP:
Ver original
  1. $consulta = $this->db->prepare('INSERT INTO bd(campo) VALUES (:campo)');
  2. $consulta->bindParam(':campo', $campo, PDO::PARAM_STR);
  3. $consulta->execute();

Y he hecho var_dumps y no veo nada de html...
  #8 (permalink)  
Antiguo 16/02/2013, 20:00
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

he probado strip_tags justo antes de bindear el parametro :campo tal que :
Código PHP:
Ver original
  1. $campo=strip_tags($campo);
  2. $consulta = $this->db->prepare('INSERT INTO bd(campo) VALUES (:campo)');
  3. $consulta->bindParam(':campo', $campo, PDO::PARAM_STR);
  4. $consulta->execute();
y aun si em sigue insertando html.
alguna idea???????
  #9 (permalink)  
Antiguo 16/02/2013, 20:14
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

en el archivo de conexión proba esto:

Código PHP:
   parent::__construct(
       
'mysql:
           host=' 
$config->get('dbhost') . ';
           dbname=' 
$config->get('dbname')';
           charset=utf-8'
$config->get('dbuser'), $config->get('dbpass'),array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
           
           ); 
  #10 (permalink)  
Antiguo 16/02/2013, 20:32
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por tomibolo Ver Mensaje
en el archivo de conexión proba esto:

Código PHP:
   parent::__construct(
       
'mysql:
           host=' 
$config->get('dbhost') . ';
           dbname=' 
$config->get('dbname')';
           charset=utf-8'
$config->get('dbuser'), $config->get('dbpass'),array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
           
           ); 
Tu cadena debe estar mal escrita si lo pongo no carga ni la pagina, hay un error de sintaxis, sublime me lo marca en la ultima linea.
  #11 (permalink)  
Antiguo 16/02/2013, 20:39
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por ferminako Ver Mensaje
Tu cadena debe estar mal escrita si lo pongo no carga ni la pagina, hay un error de sintaxis, sublime me lo marca en la ultima linea.
Puede ser, no la probe..
La idea sería agregar "charset=utf-8" al lado de la dbname.
  #12 (permalink)  
Antiguo 16/02/2013, 20:40
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

estoy probando... mmm Se me habia olvidado, el post viene de un formulario con tinymce... puede ser de ahi el problema?? aunque... aunque viniera de ahi , no tiene sentido dado que ya hago strip_tags antes de bindear... pero lo comento por si acaso ;)
  #13 (permalink)  
Antiguo 16/02/2013, 20:45
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

imposible con el charset... rompe :S
  #14 (permalink)  
Antiguo 16/02/2013, 20:48
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Imprimiste el valor antes de insertarlo verdad? De por sí ya viene mal antes de insertar a la tabla, o directamente del POST lo recibes de esta manera?
  #15 (permalink)  
Antiguo 16/02/2013, 20:51
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

si hago var_dump no veo ningun html veo x ejemplo: camión , no
Código HTML:
Ver original
  1. camin&oacute;n

ademas como te comento justo antes de bindear hago strip_tags por loq ue si hubiera algo de html lo eliminaria, asi que tiene que ser PDO pero eso si que no lo entiendo...
  #16 (permalink)  
Antiguo 16/02/2013, 21:02
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Antes de bindear probá con esto en vez de strip_tags:
htmlentities (http://www.php.net/manual/es/function.htmlentities.php)
  #17 (permalink)  
Antiguo 16/02/2013, 21:08
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

pero si uso htmlentities no las elimino.. en fin lo he probado y salen html tb solo que convierte alguna cosilla pero como los < por gt lt pero nada mas, no ahce lo que necesito...
  #18 (permalink)  
Antiguo 17/02/2013, 05:51
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

despues de inumerables pruebas he descrubierto que si deshabilito el tinymce, e introduzco los datos sobre textareas normales, los datos se insertan sin html, pero no entiendo porque... ayuda!!! :(
  #19 (permalink)  
Antiguo 17/02/2013, 09:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: PDO me inserta hmtl tags en vez de acentos

Seguramente es una opción de TinyMCE ¿ya revisaste si existe tal configuración?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 17/02/2013, 10:08
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 1 mes
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Bueno bien, por lo menos identificaste de donde viene el problema!
  #21 (permalink)  
Antiguo 17/02/2013, 10:48
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

si es un alivio, pero sigo sin entenderlo, como es posible, q incluso limpiando antes de bindear , me inserte html, y quitando los tinymce y dejando textareas planos funcione... no lo entiendo :(
  #22 (permalink)  
Antiguo 17/02/2013, 10:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por ferminako Ver Mensaje
si es un alivio, pero sigo sin entenderlo, como es posible, q incluso limpiando antes de bindear , me inserte html, y quitando los tinymce y dejando textareas planos funcione... no lo entiendo :(


Cita:
Iniciado por pateketrueke Ver Mensaje
Seguramente es una opción de TinyMCE ¿ya revisaste si existe tal configuración?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #23 (permalink)  
Antiguo 17/02/2013, 14:07
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por pateketrueke Ver Mensaje
he estado mirando y no encuentro ningun parametro de configuracion de tinymce referente a esto... y sigo sin ver el nexo de union, pues elimino cualquier resto de html supeustamente antes de bindear...
  #24 (permalink)  
Antiguo 17/02/2013, 15:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO me inserta hmtl tags en vez de acentos

El manual de referencia on line contiene información respecto a la configuración del TinyMCE.
¿Lo has consultado detalladamente?
entity_encoding

Más allá de eso, me gustaría que captures y postees un ejemplo de cómo queda un texto mayor a una palabra, recuperado de TinyMCE, para estar seguro de qué es lo que hay que hacer, aunque en principio yo supondría que las funciones de PHP deberían poder controlar tu problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 17/02/2013, 19:10
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 11 años, 11 meses
Puntos: 58
Respuesta: PDO me inserta hmtl tags en vez de acentos

Pero no entiendo una cosa. Si usas un editor como ese la idea precisamente es que te genere los estilos que luego quieres que salgan o bien en un e-mail, en una web o lo que sea. Es normal que te incluya eso con esos tags, se supone que usarás ese texto para mostrar en formato HTML así que no habrá problema aunque en la base de datos se guarde así.

Sino haz que la caja del formulario sea normal y ya está.

Saludos
  #26 (permalink)  
Antiguo 17/02/2013, 19:50
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO me inserta hmtl tags en vez de acentos


Buena observación.

Un par de preguntas:
- Según entiendo, la variable que intentas enviar a base contiene el texto correcto, pero en la base queda luego como html. ¿Es así?
- Si el tema es que al momento de insertar es cuando se produce el problema, ¿has probado usar htmlspecialchars_decode() en ese momento?

Algo como.
Código PHP:
Ver original
  1. $consulta = $this->db->prepare('INSERT INTO bd(campo) VALUES (:campo)');
  2. $consulta->bindParam(':campo', htmlspecialchars_decode($campo), PDO::PARAM_STR);
  3. $consulta->execute();
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 17/02/2013, 20:55
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: PDO me inserta hmtl tags en vez de acentos

Yo no creo que sea ningun problema que te inserte el html, por que es lo que recibe, lo que vs tenes que hacer amiguito es lo siguiente:

para insertar datos:

$text = "hola<br>bolo";
$text = trim(htmlentities(str_replace(array('\"','\\\''),a rray('"',"'"),$text), ENT_QUOTES, "UTF-8", true));

para mostrarlo:

echo html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');

y listo, esto es sagrado
  #28 (permalink)  
Antiguo 18/02/2013, 02:37
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
Iniciado por alyciashape Ver Mensaje
Pero no entiendo una cosa. Si usas un editor como ese la idea precisamente es que te genere los estilos que luego quieres que salgan o bien en un e-mail, en una web o lo que sea. Es normal que te incluya eso con esos tags, se supone que usarás ese texto para mostrar en formato HTML así que no habrá problema aunque en la base de datos se guarde así.

Sino haz que la caja del formulario sea normal y ya está.

Saludos
Es evidente que uso un editor wyswyg porque necesito q puedan meter estilos html etc.. pero debido a q desde los formularios de cliente , es un campo clave para las busquedas, no puedo permitir que se guarden palabras con acentos como "camión" con su equivalente html "cami&oacute;n" debebido a que el clietente cuando busca por el termino "camion" debe recibir tanto los registros que coincidan con "camion" como "camión" y si esta en html eso no es posible.... por lo tanto necesito que todo lo que sean acentos, ñ,ç etc se guarde en utf8 , no en html.

Voy a echar un ojo a vuestros comentarios, pruebo y os respondo.

Gracias a to2!
  #29 (permalink)  
Antiguo 18/02/2013, 03:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: PDO me inserta hmtl tags en vez de acentos

Cita:
se guarde en utf8 , no en html.
Creo que es un error de conceptos.
HTML es un lenguaje.
UTF8 es un charset, una codificación de caracteres...

Que escribas en html no implica que uses UTF8, Unicode o ASCII.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 18/02/2013, 07:54
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: PDO me inserta hmtl tags en vez de acentos

me exprese mal, pero creo q se entiende que lo que decia es q se guarde sin tags html el tema de acentos, ñ,ç etc...

Etiquetas: acentos, insert, inserta, mysql, pdo, sql, tabla, tags, vez
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 16:15.