es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La consulta de MariaDB no se ejecuta a través de PHP, funciona manualmente con HeidiSQL; problema de codificación de en guion; juego de caracteres y ordenación adecuados de utf8mb4 de la base de datos.

Estoy importando correos electrónicos desde una cuenta de Gmail y almacenándolos en una base de datos. Aparentemente, mi lógica PHP para convertir todo a UTF-8 ha fallado con un correo electrónico en particular y cuando ejecuto la consulta con ese correo electrónico, recibo el siguiente error de MariaDB:

Valor de cadena incorrecto: ‘\x96 conv…’

Aquí está la versión minimizada de la consulta SQL:

INSERT INTO mail (subject) VALUES (‘orkut – convite…’);

Finalmente rastreé esto hasta una cadena de encabezado de asunto. En mi registro general de consultas de MariaDB, la cadena aparece como se pretendía con el guion en (–): orkut – conv…. Cuando PHP intenta ejecutar la consulta, obtengo el error de valor de cadena incorrecto mencionado anteriormente, sin embargo, cuando ejecuto manualmente la misma consulta exacta a través de HeidiSQL, la consulta se ejecuta sin problemas.

El encabezado se divide entre la clave y el valor y luego se procesa el valor de la siguiente manera:

$p = explode(‘: ‘, $header, 2);
$s = mb_convert_encoding(trim($p[1]), ‘UTF-8’, mb_detect_encoding($p[1]));

Ahora he intentado muchas cosas y lo más cercano que pude llegar fue la respuesta de cmbuckly en otro hilo, sin embargo, usar $s = iconv(‘utf-8′,’windows-1252’, $s); no resolvió el problema en este caso. Tengo muchas otros intentos como usar utf8_encode($s) después, aunque en este punto simplemente estoy perdido.

Mi base de datos de MariaDB tiene el conjunto de caracteres utf8mb4 y la intercalación de base de datos utf8mb4_unicode_520_ci. No voy a intentar usar MariaDB para codificar / volver a codificar texto, esto está destinado explícitamente como una pregunta de PHP.

¿Qué está causando que MariaDB no funcione con la consulta a través de PHP, aunque permite que la consulta funcione a través de HeidiSQL? ¿He decodificado correctamente la cadena?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la codificación de la cadena de asunto. Parece que cuando PHP intenta ejecutar la consulta, la cadena no está codificada correctamente en UTF-8. Has intentado usar mb_convert_encoding para convertir la cadena a UTF-8, pero esto no ha resuelto el problema.

    También has intentado usar iconv para convertir la cadena a Windows-1252, pero esto tampoco ha resuelto el problema.

    Es posible que la cadena no esté codificada adecuadamente en UTF-8, y por eso MariaDB no la está aceptando. Es posible que necesites probar un método de codificación diferente para asegurarte de que la cadena esté correctamente codificada en UTF-8 antes de ejecutar la consulta.

Comments are closed.