Foros del Web » Programando para Internet » PHP »

Problema con las tildes en consulta a Mysql desde PHP

Estas en el tema de Problema con las tildes en consulta a Mysql desde PHP en el foro de PHP en Foros del Web. Hola a todos, tengo la siguiente situación: En mi app dentro de una de sus secciones tengo un form que recoge de un Tree el ...
  #1 (permalink)  
Antiguo 14/03/2016, 11:24
 
Fecha de Ingreso: junio-2010
Mensajes: 59
Antigüedad: 13 años, 10 meses
Puntos: 1
Pregunta Problema con las tildes en consulta a Mysql desde PHP

Hola a todos, tengo la siguiente situación:
En mi app dentro de una de sus secciones tengo un form que recoge de un Tree el nodo seleccionado y luego desde php trata de obtener, a partir de ese nombre, el ID del registro en Mysql, cuando lo hago para nodos sin tilde lo hace perfecto pero cuando lleva tilde se cuelga.

Estoy codificando en mi PHP con utf8 al igual que el mysql, incluso imprimo el nombre desde PHP y todo bien pero la consulta no funciona, ya corri la consulta en Mysql y funciona perfecto.

Utilizo Bitnami Xampp como infraestructura de servidor Apache.

Gracias de antemano.
  #2 (permalink)  
Antiguo 14/03/2016, 11:37
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

Verifica que tu en tu BD el campo de VARCHAR tenga como cotejamiento latin1_general_ci que posee todos los caracteres posibles... a ver si así ya funciona en algo...

RECOMENDACION
Cuando guardes tus caracteres especiales, deberás escaparlos, por lo menos es lo que recomiendo... yo tengo funciones que al guardar algo, convierta todos los acentos y caracteres latinos en sus escapes HTML como á... y cuando haces la búsqueda, también te busque igual...

Es un problema de flexibilidad en tu consulta de búsqueda... en estos casos se suele crear un diccionario, de esos que dicen TAL VEZ QUISISTE DECIR: "lápiz"

Pero tampoco dimensiono lo que hace, ya que no aportas ningún código...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 14/03/2016, 13:54
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

Primero que nada decirte que eso es un gran problema y hacerlo correctamente casi nunca funciona de forma que sea multiplataforma. Mira esta pagina http://evertpot.com/filesystem-encoding-and-php/

Para que funcione correctamente la codificación para español en linux. Primero tienes que instalarle la codificación en español de tu país al Sistema Operativo. Por ejemplo yo que estoy en México sería utf8_spanish_ci. Muchas distros linux hacen esto en la instalación preguntandote donde vives.

Despues, si estas usando xampp debes configurar apache y php para que usen utf8:

En apache:
[httpd.conf]
AddDefaultCharset utf-8

en algunas versiones de apache no se encuentra AddDefaultCharset en el lugar habitual y tienes que buscar $cfg['DefaultCharset'] = 'utf-8';
en toda la instalacion o variables similares.

En php:
[php.ini]
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=0

Si estas usando una versión superior o igual a php 5.6 estos parametros estan obsoletos:
mbstring.internal_encoding
mbstring.http_input
mbstring.http_output
y basta con poner default_charset = "utf-8"

Si estas usando XML-RPC:
[xmlrpc.inc]
cambia $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
por $GLOBALS['xmlrpc_internalencoding']='UTF-8';

Si usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:
$Conex=new mysqli(.....);
$Conex->set_charset("utf8");

Si usas correo como por ejemplo PHPMailer:
$mail= new PHPMailer();
$mail->CharSet = 'UTF-8';

por ultimo todos tus HTMLs o PHP que usen html tiene que tener:
<meta charset="UTF-8">

Esto funcionara perfectamente en linux pero si tratas de escribir archivos a disco en windows veras que no funciona (lo explica la url que puse hasta arriba). Es entonces cuando hay que recurrir a iconv. Ejemplo:

$nombre="ññ.txt"
$f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
fwrite($f2,$texto);
fclose($f2);

ó

$tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));

Creo que así no debería haber problemas. Y así practicamente ya no se usa utf8_decode y utf8_encode. Y el problema de origen es porque los 3 sistemas operativos principales manejan la codificacion de diferente forma. Lo explica el enlace que puse.
Espero les sirva.
  #4 (permalink)  
Antiguo 14/03/2016, 14:02
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

No tienes porque hacer todo eso, Dios, jajajajaja, mis páginas leen perfectamente lo que hago en LINUX, WINDOWS o iOS...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 14/03/2016, 14:15
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

En realidad no es mucho, y solo explico como resolverlo, pero en vez de presumir que tus paginas estan bien, deberias aportarle tu solución, para eso es esta pagina. Y te comento que si usas HTML como &aacute; y ese tipo de códigos es porque tu codificación esta mal. Yo puedo poner acentos y eñes sin necesidad de usar los codigos html. Deberias verificarlo tu tambien.
  #6 (permalink)  
Antiguo 14/03/2016, 14:26
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

¿Escapar caracteres especiales en bd? Eso al menos a mi se me hace una muy pésima práctica, es como tener basura dentro de la base de datos
  #7 (permalink)  
Antiguo 14/03/2016, 14:30
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

Cita:
Iniciado por abrahamhs Ver Mensaje
En realidad no es mucho, y solo explico como resolverlo, pero en vez de presumir que tus paginas estan bien, deberias aportarle tu solución, para eso es esta pagina. Y te comento que si usas HTML como &aacute; y ese tipo de códigos es porque tu codificación esta mal. Yo puedo poner acentos y eñes sin necesidad de usar los codigos html. Deberias verificarlo tu tambien.
Esto no es una competencia.. no esta mal lo que hago, funciona perfectamente... entonces dime, si tienes un host alquilado... ¿Cómo tocas la configuración del php.ini de manera sencilla? En caso que estes alquilando un server de Tailandia y no puedes tocar el ini ni el apache? Si debes generar pasos muy rebuscados sabiendo que no podrás controlarlos después, creo que tienes un error de procedimiento, ya que la solución debería estar al alcance de cualquier desarrollador... o usaremos tu máquina como servidor para todos los sitios... es básico...

Ya le di mi punto de vista, y tú el tuyo, opino que no deberías entrar a hacer configuraciones que luego no podrás tocar en servidores alquilados para que algo funcione... latin_general_ci contiene todos los caracteres latinos necesarios para que funcione bien... Ya explicó su problema, que si usa tilde o no usa, le trae o no.. es decir, le falta un diccionario... no sabe si el usuario escribirá mal o no... guarda tu compostura, nadie te insultó... soporta una opinión, no es un ataque a lo que sabes o no...

Cita:
Iniciado por rodocoyote15 Ver Mensaje
¿Escapar caracteres especiales en bd? Eso al menos a mi se me hace una muy pésima práctica, es como tener basura dentro de la base de datos
Es una solución... pero depende del caso. Si vamos por eso, no veo que los códigos PHP cumplan con las normas estrictas de estructura programáticas, las declaraciones de tipo de variables, las formas de comparación, orden, etc... asi que, en un lenguaje que te permite tanta flexibilidad, la creatividad es una herramienta válida, y claro que pueden no escaparse los caracteres, pero al problema, que tú no has aportado nada, hay que ir viendo que le va mejor, y eso depende de la respuesta del interesado, de eso se trata el foro.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 14/03/2016 a las 14:44
  #8 (permalink)  
Antiguo 14/03/2016, 14:33
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

El escape de caracteres en BD si se debe hacer, pero no es para resolver el problema de codificación, si no que es para evitar inyecciones sql. Y obvio no se debe hacer a mano (a mano si es pésima práctica), sino usando esta función en cada campo donde se quiere evitar la inyección sql.

$conexion->real_escape_string($valor);
  #9 (permalink)  
Antiguo 14/03/2016, 14:37
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

si ese es el caso solo debe pedir esas configuraciones en un .htacces solo para su aplicación.
Bueno, si nadie insulto que son estas burlas: "No tienes porque hacer todo eso, Dios, jajajajaja"
  #10 (permalink)  
Antiguo 14/03/2016, 14:47
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

Ok, quieres usar esto como Chat? Primero que nada, no es burla, es chascarrillo debido a que mezclaste sistemas operativos con redes, servidores, configuraciones, ofensa sería llamarte de manera despectiva... segundo.. no se permite escribir 2 post seguidos... tercero, no estamos para debatir la sensibilidad... cuida tu comportamiento en FDW.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #11 (permalink)  
Antiguo 14/03/2016, 14:54
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

bueno chascarillo, y yo "debo cuidar mi comportamiento", Fin de la historia mejor
  #12 (permalink)  
Antiguo 14/03/2016, 15:11
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Problema con las tildes en consulta a Mysql desde PHP

Cita:
Iniciado por abrahamhs Ver Mensaje
bueno chascarillo, y yo "debo cuidar mi comportamiento", Fin de la historia mejor
Esto no es un chat.

Cita:
2.10 Los usuarios deben usar un lenguaje cortés, respetuoso y gentil. Ningún usuario puede publicar material o contenido que sea conocidamente falso, difamatorio, insultante, acosatorio, vulgar, hostil, obsceno, profano, de orientación sexual, amenazante, racista o que fomente cualquier tipo de odio, ilegal en algún país o región, invasivo de la privacidad de alguna persona o que vulnere alguna ley o derechos de autor.
Disculpa por los "jajajaja", esto es un foro y no verás que ofendo a nadie y respeto a cada uno como es y a lo que aporta, pero si veo que tu solución tiene algun inconveniente de aplicación general, pues te lo digo, no como verdad, si no como opinión. Ya luego te dije que es tu opinion, y te di la mia y argumenté el por qué. Es un FORO se trata de compartir conocimientos y si da lugar los motivos, causas, efectos y todo lo que implica una metodología o solución. Tú insistes en tus sarcasmos e ironías que incitan a un lenguaje agresivo, y desvías totalmente el tema llevándolo al lado personal. Cuidamos en este foro las composturas, y es lo que te pedí en segunda instancia. Pero todo lo tomas como agresión personal. Y eso que te dije que no debatimos las sensibilidades.

Solicito entonces a los Moderadores que borren todos los posteos irrelevantes al caso, incluso los mios.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: mysql, registro, tildes
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:03.