Solución Caracteres Extraños al convertir, migrar, trasladar - phpBB-Es.COM - Sitio Oficial España - Hispano

Esta es una duda más que común y que tal vez a todos nos ha llegado a suceder alguna vez si es que hemos llegado a migrar una base de datos de un gestor a otro o haber migrado de phpBB2 a phpBB3 o simplemente luego de trasladar nuestro foro a otro servidor.

Esto sucede porque realizamos algún paso equivocadamente en el momento aquel, sobre todo porque no nos fijamos en la codificación los archivos y la base de datos.

Aclaro que este tutorial solo es para arreglar caracteres de los temas, foros, post, nombres de usuarios, firmas, etc... en si solo los datos almacenados en la base de datos.

Si este problema te sucede luego de instalar un MOD, o modificar un archivo de idioma, puedes fijarte en este documento sobre Dudas frecuentes en phpBB3, en el que se explica como solucionarlo.

Y sin más preámbulos vamos a la solución.

Esta consiste en generar unas consultas SQL mediante phpMyAdmin para reemplazar estos caracteres extraños por las letras con los acentos, las ñ y algunos caracteres especiales.

Así que abrimos nuestra base de datos mediante phpMyAdmin (esto en el caso de MySQL), o si usamos otro tipo de base de datos, entonces con su gestor favorito.

Primero que todo y como siempre, creamos una backup de la base de datos por si surge algun inconveniente.

Aca estoy poniendo los ejemplo con el prefijo "phpbb_" que es el mas usado y el que trae por defecto phpBB en su instalación, pero si usan otro deberan cambiarlo o sino, las consultas mostraran error.

[/hr]
Ejecutamos por partes, las siguiente consultas (también se puede ejecutar todas juntas pero lo hare de esta manera, para explicar mejor).

Nombres de los foros y subforos (Para estos tendremos que actualizar los registros de la tabla phpbb_forums):
Code: Seleccionar todo
UPDATE phpbb_forums SET forum_name = replace(forum_name,'á','á');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'é','é');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'í','í');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'ó','ó');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'ú','ú');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'ñ','ñ');
UPDATE phpbb_forums SET forum_name = replace(forum_name,'¿','¿');

Descripción de los foros y subforos:
Code: Seleccionar todo
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'á','á');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'é','é');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'í','í');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'ó','ó');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'ú','ú');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'ñ','ñ');
UPDATE phpbb_forums SET forum_desc = replace(forum_desc,'¿','¿');

Titulos de los Temas (Para estos tendremos que actualizar los registros de la tabla phpbb_topics):
Code: Seleccionar todo
UPDATE phpbb_topics SET topic_title = replace(topic_title,'á','á');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'é','é');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'í','í');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'ó','ó');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'ú','ú');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'ñ','ñ');
UPDATE phpbb_topics SET topic_title = replace(topic_title,'¿','¿');

Asutos de los post (Para estos tendremos que actualizar los registros de la tabla phpbb_posts):
Code: Seleccionar todo
UPDATE phpbb_posts SET post_subject = replace(post_subject,'á','á');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'é','é');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'í','í');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'ó','ó');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'ú','ú');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'ñ','ñ');
UPDATE phpbb_posts SET post_subject = replace(post_subject,'¿','¿');

Texto de los post (Si tu foro es muy grande y tiene demaciados mensajes, esta consulta puede tardar mas en realizarse, así que tengamos paciencia):
Code: Seleccionar todo
UPDATE phpbb_posts SET post_text = replace(post_text,'á','á');
UPDATE phpbb_posts SET post_text = replace(post_text,'é','é');
UPDATE phpbb_posts SET post_text = replace(post_text,'í','í');
UPDATE phpbb_posts SET post_text = replace(post_text,'ó','ó');
UPDATE phpbb_posts SET post_text = replace(post_text,'ú','ú');
UPDATE phpbb_posts SET post_text = replace(post_text,'ñ','ñ');
UPDATE phpbb_posts SET post_text = replace(post_text,'¿','¿');


Firmas de los usuarios (Para estos tendremos que actualizar los registros de la tabla phpbb_users):
Code: Seleccionar todo
UPDATE phpbb_users SET user_sig = replace(user_sig,'á','á');
UPDATE phpbb_users SET user_sig = replace(user_sig,'é','é');
UPDATE phpbb_users SET user_sig = replace(user_sig,'í','í');
UPDATE phpbb_users SET user_sig = replace(user_sig,'ó','ó');
UPDATE phpbb_users SET user_sig = replace(user_sig,'ú','ú');
UPDATE phpbb_users SET user_sig = replace(user_sig,'ñ','ñ');
UPDATE phpbb_users SET user_sig = replace(user_sig,'¿','¿');


Nicks de los usuarios (Algunos usuarios usan caracteres especiales o acentos en sus Nicks, así que tambien es necesario actulizar estos campos).
Code: Seleccionar todo
UPDATE phpbb_users SET username = replace(username,'á','á');
UPDATE phpbb_users SET username = replace(username,'é','é');
UPDATE phpbb_users SET username = replace(username,'í','í');
UPDATE phpbb_users SET username = replace(username,'ó','ó');
UPDATE phpbb_users SET username = replace(username,'ú','ú');
UPDATE phpbb_users SET username = replace(username,'ñ','ñ');
UPDATE phpbb_users SET username = replace(username,'¿','¿');
UPDATE phpbb_users SET username_clean = replace(username_clean,'á','á');
UPDATE phpbb_users SET username_clean = replace(username_clean,'é','é');
UPDATE phpbb_users SET username_clean = replace(username_clean,'í','í');
UPDATE phpbb_users SET username_clean = replace(username_clean,'ó','ó');
UPDATE phpbb_users SET username_clean = replace(username_clean,'ú','ú');
UPDATE phpbb_users SET username_clean = replace(username_clean,'ñ','ñ');
UPDATE phpbb_users SET username_clean = replace(username_clean,'¿','¿');


[/hr]
Estas consultas convertiran los caracteres á , é , í , ó , ú , ñ , ¿ lo que significa que no convierten otros caractedes especiales como el º o vocales con acentos en MAYUSCULAS (É , Ú , Ó), así que deberan crear sus propias consultas para esto, explico:

Para convertIr otros caracteres que no estan acá, de la siguiente manera:

UPDATE TABLA_DE_PHPBB SET CAMPO_TABLA = replace( CAMPO_TABLA, 'CARACTER_EXTRAÑO' , 'CARACTER_CORRECTO' );

TABLA_DE_PHPBB, Tabla en la cual realizaremos la consulta, eje = phpbb_posts,
CAMPO_TABLA, campo en el cual se encuentra almanecenado el caracter extraño, eje = post_text,
CARACTER_EXTRAÑO, caracter que queremos convertir, eje = ´ => caracter extraño que representa la Á,
CARACTER_CORRECTO, caracter correcto por que queremos reemplazar el extraño, eje = Á,

Entonces si queremos crear una consulta con el ejemplo anterior que puse quedaria de la siguiete manera:

UPDATE phpbb_posts SET post_text = replace( post_text , '´' , 'Á' );

Y lo que haria, seria reemplazar todos los caracteres estraños que representan la á mayuscula por "Á".

[/hr]

Espero haberme hecho entender y que esta guía les sea de utilidad, cualquier duda, pueden preguntar.

Tutorial creado por Alorse en Guías sobre phpBB 3