2010-03-24

Configurar tu sitio web para trabajar en UTF-8 con PHP + MySQL + Apache + Navegador + PostgreSQL

Desde un archivo php.ini para que por defecto PHP trabaje con UTF-8
default_charset = "utf-8"

Desde el archivo my.cnf para que tu MySQL tambien trabaje por defecto con UTF-8
[client]
default-character-set = utf8

[mysqld]
init-connect='SET NAMES utf8'
character-set-server = utf8
default-character-set = utf8
default-collation = utf8_unicode_ci
character-set-client = utf8

Dentro del archivo httpd.conf o .htaccess pones esto para que Apache trabaje con UTF-8 también:
AddDefaultCharset UTF-8

Dentro de tu script PHP pone esto:

< ? php //HTML HEADER header( 'Content-Type: text/html; charset=UTF-8' ); /* Configurar el encoding de PHP para trabajar con UTF-8 */ // Solo (PHP 4 >= 4.0.6, PHP 5 o superior)
mb_internal_encoding("UTF-8");

/* Ver el encoding que esta trabajando */
//echo mb_internal_encoding();
? >

Base de datos MySQL por medio del script:
Cuando trabajas con la base de datos siempre pasale estos SET a MySQL antes traer datos.
También tenes que tener todas tus tablas creada para que guarde los datos en UTF-8
para no tener problema.

//Extensión mysql
mysql_query( "SET NAMES utf8", $database_connection );
mysql_query( "SET CHARACTER SET utf8", $database_connection );

//Extensión mysqli
mysqli_query( "SET NAMES utf8", $tu_conector_a_mysql );
mysqli_query( "SET CHARACTER SET utf8", $tu_conector_a_mysql );

Otros para trabajar con UTF-8 desde PHP
//PHP ejemplo
$str = mb_convert_encoding($str, "UTF-8", "UTF-8" );
$str = @iconv("UTF-8", "UTF-8//IGNORE", $str );

Funciones equivalente y compatible con UTF-8 y multibyte para no romper textos
mail() = mb_send_mail()
strlen() = mb_strlen()
strpos() = mb_strpos()
strrpos() = mb_strrpos()
substr() = mb_substr()
strlower() = mb_strtolower()
strtoupper() = mb_strtoupper()
substr_count() = mb_substr_count()
split() = mb_split()

Expresión regulares compatible con UTF-8
PCRE requieren un modificador de patrón de 'U' para que el motor de PCRE consciente de que UTF-8 se utiliza.
POSIX tienen funciones equivalentes de múltiples bytes tales como a continuación:
ereg() = mb_ereg()
ereg_replace() = mb_ereg_replace()

PostgreSQL y UTF-8

Creamos las tablas con
CREATE DATABASE database_name WITH ENCODING 'UTF8';

Desde script PHP
pg_set_client_encoding( $database_connection, 'UTF8' );

SQL comandos
SET CLIENT_ENCODING TO 'UTF8';
SET NAMES 'UTF8';

Mas Info: Link

No hay comentarios: