Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 06-11-2008 12:18:34

captaincoincoin
Membre

Problème de débutant : encodage UTF-8 qui se passe bizarrement

Bonjour tout le monde,

Je sais que le thème a été abordé maintes et maintes fois, mais j'ai tout tenté, en vain ! Désolé par avance de la longueur du message ...
J'ai un gros problème d'encodage UTF-8 sur le forum fluxBB que j'ai déployé chez moi en local. Je vous montre la capture d'écran des interclassements de mon forum dont les DB ont pour préfixe 'FAQ_' ; et à côté le résultat, notez que tous les textes accentués qui font appel à des valeurs dans la DB sont tronqués au premier caractère accentué :

phpmyadminfaqgt0.th.pngresultatxl1.th.png

On remarque par exemple que le titre "Section Méca" n'est pas passé alors que 'Déconnexion' s'affiche correctement.

Pour info, j'ai également lancé une requête SHOW VARIABLES sur la base principale :

Variable_name     Value
back_log     50
basedir     /usr/
bdb_cache_size     8388600
bdb_home     /var/lib/mysql/
bdb_log_buffer_size     32768
bdb_logdir      
bdb_max_lock     10000
bdb_shared_data     OFF
bdb_tmpdir     /tmp/
binlog_cache_size     32768
bulk_insert_buffer_size     8388608
character_set_client     utf8
character_set_connection     utf8
character_set_database     latin1
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8
character_sets_dir     /usr/share/mysql/charsets/
collation_connection     utf8_unicode_ci
collation_database     latin1_swedish_ci
collation_server     latin1_swedish_ci
concurrent_insert     ON
connect_timeout     5
datadir     /var/lib/mysql/
date_format     %Y-%m-%d
datetime_format     %Y-%m-%d %H:%i:%s
default_week_format     0
delay_key_write     ON
delayed_insert_limit     100
delayed_insert_timeout     300
delayed_queue_size     1000
expire_logs_days     0
flush     OFF
flush_time     0
ft_boolean_syntax     "+ -><()~*:""""&|"
ft_max_word_len     84
ft_min_word_len     4
ft_query_expansion_limit     20
ft_stopword_file     (built-in)
group_concat_max_len     1024
have_archive     NO
have_bdb     YES
have_blackhole_engine     NO
have_compress     YES
have_crypt     YES
have_csv     NO
have_example_engine     NO
have_geometry     YES
have_innodb     YES
have_isam     NO
have_ndbcluster     NO
have_openssl     YES
have_query_cache     YES
have_raid     NO
have_rtree_keys     YES
have_symlink     YES
init_connect      
init_file      
init_slave      
innodb_additional_mem_pool_size     2097152
innodb_autoextend_increment     8
innodb_buffer_pool_awe_mem_mb     0
innodb_buffer_pool_size     16777216
innodb_data_file_path     ibdata1:10M:autoextend:max:128M
innodb_data_home_dir      
innodb_fast_shutdown     ON
innodb_file_io_threads     4
innodb_file_per_table     OFF
innodb_flush_log_at_trx_commit     1
innodb_flush_method      
innodb_force_recovery     0
innodb_lock_wait_timeout     50
innodb_locks_unsafe_for_binlog     OFF
innodb_log_arch_dir      
innodb_log_archive     OFF
innodb_log_buffer_size     8388608
innodb_log_file_size     5242880
innodb_log_files_in_group     2
innodb_log_group_home_dir     ./
innodb_max_dirty_pages_pct     90
innodb_max_purge_lag     0
innodb_mirrored_log_groups     1
innodb_open_files     300
innodb_table_locks     ON
innodb_thread_concurrency     8
interactive_timeout     28800
join_buffer_size     131072
key_buffer_size     16777216
key_cache_age_threshold     300
key_cache_block_size     1024
key_cache_division_limit     100
language     /usr/share/mysql/english/
large_files_support     ON
license     GPL
local_infile     ON
locked_in_memory     OFF
log     OFF
log_bin     ON
log_error     /var/log/mysql/mysqld.err
log_slave_updates     OFF
Variable_name     Value
log_slow_queries     OFF
log_update     OFF
log_warnings     1
long_query_time     10
low_priority_updates     OFF
lower_case_file_system     OFF
lower_case_table_names     0
max_allowed_packet     1047552
max_binlog_cache_size     4294967295
max_binlog_size     1073741824
max_connect_errors     10
max_connections     100
max_delayed_threads     20
max_error_count     64
max_heap_table_size     16777216
max_insert_delayed_threads     20
max_join_size     4294967295
max_length_for_sort_data     1024
max_prepared_stmt_count     16382
max_relay_log_size     0
max_seeks_for_key     4294967295
max_sort_length     1024
max_tmp_tables     32
max_user_connections     0
max_write_lock_count     4294967295
myisam_data_pointer_size     4
myisam_max_extra_sort_file_size     2147483648
myisam_max_sort_file_size     2147483647
myisam_recover_options     OFF
myisam_repair_threads     1
myisam_sort_buffer_size     8388608
myisam_stats_method     nulls_unequal
net_buffer_length     8192
net_read_timeout     30
net_retry_count     10
net_write_timeout     60
new     OFF
old_passwords     OFF
open_files_limit     1024
pid_file     /var/run/mysqld/mysqld.pid
port     3306
preload_buffer_size     32768
prepared_stmt_count     0
protocol_version     10
query_alloc_block_size     8192
query_cache_limit     1048576
query_cache_min_res_unit     4096
query_cache_size     0
query_cache_type     ON
query_cache_wlock_invalidate     OFF
query_prealloc_size     8192
range_alloc_block_size     2048
read_buffer_size     258048
read_only     OFF
read_rnd_buffer_size     520192
relay_log_purge     ON
relay_log_space_limit     0
rpl_recovery_rank     0
secure_auth     OFF
server_id     1
skip_external_locking     ON
skip_networking     OFF
skip_show_database     OFF
slave_net_timeout     3600
slave_transaction_retries     0
slow_launch_time     2
socket     /var/run/mysqld/mysqld.sock
sort_buffer_size     524280
sql_mode      
sql_notes     ON
sql_warnings     ON
storage_engine     MyISAM
sync_binlog     0
sync_frm     ON
sync_replication     0
sync_replication_slave_id     0
sync_replication_timeout     0
system_time_zone     CEST
table_cache     64
table_type     MyISAM
thread_cache_size     0
thread_stack     196608
time_format     %H:%i:%s
time_zone     SYSTEM
tmp_table_size     33554432
tmpdir     /tmp/
transaction_alloc_block_size     8192
transaction_prealloc_size     4096
tx_isolation     REPEATABLE-READ
version     4.1.20-log
version_bdb     Sleepycat Software: Berkeley DB 4.1.24: (September 21, 2007)
version_comment     Gentoo Linux mysql-4.1.20
version_compile_machine     i686
version_compile_os     pc-linux-gnu
wait_timeout     28800

Je ne peux pas modifier les CHARSET de la DB complète car il y a d'autres DB que mon forum et ça risque de merdouiller.

Pour tester l'encodage de mon forum, j'ai exécuté ce petit script :

<?php
/* le script doit être en utf-8 (pour les données de la requète insert, ou sinon, fais un utf8_encode() sur les données avant de les insérer */
mysql_connect('localhost', 'user', 'pass');
mysql_select_db('dbname');

/* Vérification de la connexion */
if (mysql_errno()) {
   printf("Echec de la connexion : %s\n", mysql_error());
   exit;
}

mysql_query("SET NAMES 'utf8'");

mysql_query("INSERT INTO table_test (texte) VALUES('Ceci est un test de la gestion de l\'utf-8 par MySQL é è € à ß')");

$result = mysql_query("SELECT texte FROM table_test LIMIT 1");
$row = mysql_fetch_array($result);

header('Content-Type: text/plain; charset=UTF-8');
echo $row['texte'];
exit;

?>

Le résultat est négatif, je n'obtiens pas les caractères accentués. Effectivement, dans la DB SQL je n'ai pas la bonne valeur stockée avec les caractères UTF-8.
Ce qui m'étonne, c'est que j'ai entré ces valeurs à la main dans la DB et je peux les visualiser (avec la deuxième partie du script) et elles s'affichent très bien à l'écran.

J'ai inséré le code : mysql_query("SET NAMES 'utf8'"); dans mon fichier index.php du forum, sans résultat positif.
Je suis démuni !

J'ai l'impression que c'est lors de l'écriture dans la base MySQL par les scripts PHP que j'ai un problème entre les conversions des charsets.
Pour info, Version du serveur SQL: 4.1.20-log et PHP Version 5.1.4-pl0-gentoo.

Auriez-vous des pistes ?

Antoine

PS : je suis désolé de ne pouvoir mettre en lien le site mais c'est sur un intranet qu'il est déployé ...

Hors ligne

#2 06-11-2008 15:59:46

Mpok
Néo Admin

Re : Problème de débutant : encodage UTF-8 qui se passe bizarrement

Bonjour,

Il faut que toutes les tables fluxbb soient encodées en latin1_general.
(et vérifier également l'encodage des champs eux-mêmes).

Hors ligne

#3 06-11-2008 16:09:54

captaincoincoin
Membre

Re : Problème de débutant : encodage UTF-8 qui se passe bizarrement

Bonjour,

D'abord merci de votre réponse rapide.
Je n'ai aucun risque à tout passer en latin1 ?
Dans mes pages PHP du forum FluxBB, devrais-je convertir quelque chose ?
Merci d'avance !

Antoine

PS : s'il y a une méthode pour convertir rapidement tous les champs d'une table d'un interclassement à un autre, je serai vraiment très reconnaissant wink

Hors ligne

#4 06-11-2008 17:09:30

captaincoincoin
Membre

Re : Problème de débutant : encodage UTF-8 qui se passe bizarrement

OK merci de l'astuce, après moultes tentatives j'y suis parvenu !
En suivant vos conseils, j'ai fini par repasser toutes mes tables en latin1 et les charset des php en iso-8859-1.
Enfin, et c'est là le détail qui m'a tué :
Dans le common_db.php, j'ai ajouté la dernière ligne, en fin de fichier :

// Create the database adapter object (and open/connect to/select db)
$db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, $p_connect);
mysql_query("SET NAMES 'latin1'");

Et désormais ça a l'air de fonctionner ...

A+

Antoine

Dernière modification par captaincoincoin (06-11-2008 17:09:54)

Hors ligne

Pied de page des forums