Caracteres extraños - a pesar de que todo está en UTF-8

3 ago 2014, 07:51:37
Vistas: 35.3K
Votos: 8

No estoy seguro por qué este hilo fue cerrado, pero este es el mismo problema que afecta a muchas personas.

Todas mis configuraciones de WP están en orden:

//define('DB_CHARSET', 'utf8');
//define('DB_CHARSET', 'utf8_unicode_ci');
//define('DB_COLLATE', '');

Incluso intenté habilitarlas una por una. Ninguna funcionó.

Cuando guardo una entrada, aparecen caracteres extraños en lugar de apóstrofes y espacios. Esto sucede tanto si escribo el contenido manualmente o no.

He probado algunos plugins.

  1. UTF-8 Sanitize
  2. Convert WP to UTF-8

..etc.

Ninguno de ellos funciona. El problema persiste.

También he cambiado el conjunto de caracteres y la colación de la base de datos en MySQL. Captura de pantalla:

Tablas/columnas de MySQL todas en utf-8

Esta es una captura de pantalla de cuando ingreso contenido pegándolo:

El texto está bien al ingresarlo en la interfaz de WP

Pero inmediatamente después de guardar, el texto regresa con caracteres confusos que lo han reemplazado:

Caracteres confusos molestos

¿Qué más?

Pasé por el proceso de volcar toda la base de datos MySQL, luego eliminar todos los caracteres antiguos que no eran utf-8 mediante el comando TR.

tr -cd '\11\12\15\40-\176' < file-with-binary-chars > clean-file

Donde file-with-binary-chars era el volcado de MySQL. Luego restauré la tabla.

Mi configuración de MySQL está toda en utf8:

[client]
default-character-set=utf8

[mysqld]
character-set-client=utf8
collation-server=utf8_unicode_ci
character-set-server=utf8

Mi navegador es Chrome. La codificación es UTF-8 (en el menú VER).

¿Qué más puedo hacer? ¿Necesito hacer que todos los archivos de plugins sean utf-8 también?

Para su información, este blog es uno de los blogs de WordPress. Hay otras instalaciones más nuevas de WordPress en el mismo servidor usando la misma instalación de MySQL 5.6.17, pero no tienen este problema. Mi suposición es que, al ser un blog más antiguo, puede tener algunas variaciones en el texto ingresado hace mucho tiempo, pero francamente después de haber hecho todo lo anterior, realmente no sé qué más puedo hacer.

¡Gracias por cualquier aporte o sugerencia!

1
Comentarios

Solo para agregar, ahora también me he asegurado de que todos los archivos de plugins y temas tengan su texto en UTF8. Este es el código que usé: https://gist.github.com/anonymous/6761e2142c214fb6ef4a

PKHunter PKHunter
3 ago 2014 08:09:33
Todas las respuestas a la pregunta 6
1

Esto típicamente ocurre cuando copias/pegas información de MS Word en el editor de contenido de WordPress. WordPress utiliza algo llamado "Comillas Inteligentes", a través de una función llamada wptexturize().

Solución Ideal

La solución ideal sería revisar tu contenido y reemplazar todas las comillas simples/dobles utilizando el teclado.

Sin embargo, si estás trabajando con grandes cantidades de texto copiado/pegado, esto puede no ser factible.

Deshabilitar el Filtro wptexturize()

Otra opción es deshabilitar el filtro wptexturize(); lo cual se puede lograr colocando el siguiente código en el archivo functions.php de tu tema hijo:

remove_filter('the_content', 'wptexturize');

También puedes querer remover el filtro de los comentarios y/o extractos:

remove_filter('comment_text', 'wptexturize');
remove_filter('the_excerpt', 'wptexturize');

O para los títulos:

remove_filter('single_post_title', 'wptexturize');
remove_filter('the_title', 'wptexturize');
remove_filter('wp_title', 'wptexturize');

Limpiar la Base de Datos

Para contenido existente que ya ha guardado los caracteres "extraños" en la base de datos; puede que necesites limpiar la base de datos ejecutando las siguientes consultas desde PHPMyAdmin (asegúrate de hacer un respaldo primero):

UPDATE wp_posts SET post_content = REPLACE(post_content, '“', '“');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'â€', '”');
UPDATE wp_posts SET post_content = REPLACE(post_content, '’', '’');
UPDATE wp_posts SET post_content = REPLACE(post_content, '‘', '‘');
UPDATE wp_posts SET post_content = REPLACE(post_content, '—', '–');
UPDATE wp_posts SET post_content = REPLACE(post_content, '–', '—');
UPDATE wp_posts SET post_content = REPLACE(post_content, '•', '-');
UPDATE wp_posts SET post_content = REPLACE(post_content, '…', '…');

Plugins

Bueno... es WordPress. Siempre puedes usar un plugin para ayudar a gestionar el filtro wptexturize(). Echa un vistazo a Esta Lista y comprueba si alguno se adapta a tus necesidades.

3 ago 2014 18:09:29
Comentarios

Gracias por esta publicación tan informativa y tienes razón, las comillas causan estos problemas. Pero no se limita solo a las comillas. A veces, incluso los espacios antes y después de un punto tienen estos caracteres extraños. En segundo lugar, claramente algo en algún lugar está mal, porque esto no sucede en ningún otro blog en el mismo servidor exacto, utilizando la misma instalación base de MySQL y todo lo demás. Los archivos de configuración también son bastante similares.

PKHunter PKHunter
4 ago 2014 09:00:10
2

Me enfrentaba exactamente al mismo problema.

Probé todo exactamente como tú y al final intenté una última cosa.

Cambié el DB_CHARSET en el archivo wp-config a latin1.

Y las cosas funcionaron :/

define('DB_CHARSET', 'latin1');
define('DB_COLLATE', 'utf8mb4_general_ci');
23 jul 2018 08:14:52
Comentarios

Esto funcionó muy bien para mí. Una nota, creo que es recomendable usar utf8mb4_unicode_ci según la información en este post. Al menos, las opciones están bien explicadas aquí para que cada uno pueda tomar su propia decisión.

Zachary Dow Zachary Dow
25 oct 2018 21:03:36

@ZacharyDow exactamente... Y depende de su configuración personal.

vs_lala vs_lala
3 nov 2018 15:19:55
0

En otro caso, si estás usando PHP Dom (loadHTML) en algún lugar, es necesario cargar el HTML como UTF-8. Lo he solucionado reemplazando:

Reemplazando

@$dom->loadHTML($html);

por

@$dom->loadHTML('<?xml encoding="UTF-8">' . $html);
25 sept 2019 10:24:34
1

Lo siguiente solucionó mi problema, así que lo comparto aquí. A pesar de haber ejecutado las actualizaciones SQL sugeridas, seguía viendo esos símbolos extraños antes de los enlaces "leer más".

Estoy totalmente sorprendido. Después de horas de probar cosas y hacer pruebas, finalmente encontré la opción en "Ajustes" y luego "Lectura" llamada: "Codificación para páginas y feeds". Después de cambiar de UTF-7 a UTF-8, todo volvió a verse bien.

Configuración de codificación en WordPress

Y lo más extraño es que después de cambiarlo a UTF-8, la opción desaparece de la página. Según el sitio de WordPress, esta opción fue eliminada desde la versión 3.5.

15 nov 2017 01:29:08
Comentarios

¡Gracias @Neal! También he solucionado mi problema con esta solución.

Hemã Vidal Hemã Vidal
13 ago 2018 23:20:10
1

El problema puede ser causado por los plugins y las subidas directas por FTP.

Aquí están los detalles:

http://iiiji.com/wordpress-appearing-weird-characterscode/

10 sept 2016 03:13:39
Comentarios

Por favor, agrega la esencia de la solución, aunque no sea todo, para que incluso si el enlace deja de funcionar, esta respuesta siga siendo válida

bravokeyl bravokeyl
10 sept 2016 08:15:30
0

En mi caso, los caracteres extraños no se escribieron en la base de datos. Verifica si el SQL crudo también muestra los caracteres incorrectos. Si estás viendo apóstrofes normales en la base de datos, comenta las siguientes dos líneas en el archivo wp-config.php:

// define('DB_CHARSET', 'utf8');
// define('DB_COLLATE', '');

Eso solucionó el problema para mí inmediatamente.

"Este problema de codificación de caracteres puede ocurrir después de una actualización de la base de datos" - Enlace

6 ene 2021 23:33:17