Page 1 sur 2

Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Aoû 19, 2008 4:01 pm
par twin
Hello,

J'ai un fichier php que j'affiche en include dans mon site qui est en ISO8859-1
Les données que va chercher mon fichier php est en UTF-8

Ce qui donne une erreurs avec les accents lorsque j'affiche le fichier sur mon site. Existe t-il une fonction où autre à inclure dans mon fichier php afin que cela soit convertis ?

Re: Convertir encodage des caractéres

MessagePosté: Mar Aoû 19, 2008 4:39 pm
par Yoyo
Salut, tu vas avoir besoin de la fonction qui permet de convertir une chaîne au format UTF-8 en ISO8859-1:

Code: Tout sélectionner
utf8_decode() 


Et l'inverse, convertir une chaine ISO8859-1 en UTF-8:

Code: Tout sélectionner
utf8_encode() 


Bienvenue sinon :)

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Aoû 19, 2008 7:15 pm
par twin
Cool, merci. Je test cela le plus rapidement possible, et je te tiens au courant ;)

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 2:13 pm
par twin
Salut,

je reviens vers toi car visiblement, çà ne fonctionne pas.
h*ttp://www.toilef1.fr/commentaires.php
Code: Tout sélectionner
<?php
/* Ne tentez pas de créer ce fichier à la main !!! Lisez le fichier README.txt et lancez l'assistant d'instalaltion. */
// ** MySQL settings ** //
define('DB_NAME', '??');    // The name of the database
define('DB_USER', '??');     // Your MySQL username
define('DB_PASSWORD', '??'); // ...and password
define('DB_HOST', '??');    // 99% chance you won't need to change this value
define('DB_CHARSET', 'ISO-8859-1');
define('DB_COLLATE', '');
define('VHOST', 'no'); 
$base 
= '/';
$str = mb_convert_encoding($str, "ISO-8859-1", "auto");
// double check $base
if( $base == 'BASE' )
    die( 'Problème avec le fichier wp-config.php - La variable $base est définie avec la constante BASE lorsuque vous utilisez les URLs comme "/" ou "/blogs/"! Merci de corriger cela!' );
// You can have multiple installations in one database if you give each a unique prefix
$table_prefix  = 'wp_';   // Only numbers, letters, and underscores please!

// Change this to localize WordPress.  A corresponding MO file for the
// chosen language must be installed to wp-content/languages.
// For example, install de.mo to wp-content/languages and set WPLANG to 'de'
// to enable German language support.
define('WPLANG', 'fr_FR');
// uncomment this to enable wp-content/sunrise.php support
//define( 'SUNRISE', 'on' );

define( "WP_USE_MULTIPLE_DB", false );

/* That's all, stop editing! Happy blogging. */

define('ABSPATH', dirname(__FILE__).'/');
require_once(
ABSPATH.'wp-settings.php');
?>
<?php

//What blogs where last updated, lets grab a bunch at first.
$blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE domain!='toileblogs.com' AND public = 1 AND last_updated!='0000-00-00 00:00:00' ORDER BY last_updated DESC LIMIT 10");

$tables = array();
foreach ($blogs as $blog) {
// we need _posts and _options tables for this to work
$blogOptionsTable = "wp_".$blog."_options";
$blogPostsTable = "wp_".$blog."_posts";
$blogCatTable = "wp_".$blog."_post2cat";
//add to array for later use
$table = array ($blog, $blogPostsTable, $blogOptionsTable, $blogCatTable );
$tables[] = $table; //push into tables
}

//now lets pull out 5 recent posts from each blog
$postresults = array();
foreach ($tables as $t) {
$postitems = $wpdb->get_results("SELECT ID,post_title,guid,post_content,comment_count,post_date_gmt FROM $t[1] WHERE post_status = 'publish' AND guid != '' ORDER BY id DESC LIMIT 0,10");
//push into array, had $postresults[] = $postitems;, but didn't work?

if ($postitems) {
foreach ($postitems as $postitem) {
$col = array($postitem->ID,$postitem->post_title,$postitem->guid,$postitem->post_content,$postitem->comment_count,$postitem->post_date_gmt,$t[0]);
$postresults[] = $col;
}
}
}

function cutpost($text) { // Fakes an excerpt if needed

$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = 30;
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_push($words, '[...]');
$text = implode(' ', $words);
}
return $text;
}
function cmp($a,$b) {
$at = strtotime($a[5]);
$bt = strtotime($b[5]);
if(
$at == $bt)
return(
0);
if(
$at < $bt)
return(
1);
else
return(-
1);
}

usort($postresults, 'cmp');
$postresults = array_slice($postresults, 0,10); //limit number of results

foreach ($postresults as $postresult) {
$siteurl = $wpdb->get_col("SELECT option_value FROM wp_". $postresult[6] ."_options WHERE option_name='siteurl'");
$blogname = $wpdb->get_col("SELECT option_value FROM wp_". $postresult[6] ."_options WHERE option_name='blogname'");

//todo - this is an array, need to sort and pull out
//$catitems = $wpdb->get_col("SELECT category_id FROM wp_".$postresult[6]."_post2cat WHERE $postitems->ID ORDER BY category_id");
            
?>
<a href="<?php echo $postresult[2]; ?>" rel="bookmark" title=' du blog F1 : "<?php echo $postresult[1]; ?>"' target="_blank"> - <?php echo $postresult[1]; ?></a> 
<?php } ?>


J'ai essayé de mettre ton code, mais quand j'affiche celui-ci, il n'arrive pas à se connecter à la bdd.

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 2:20 pm
par Yoyo
Hello, bah on va voir ça :)

Sinon quel est le rapport avec la connexion bdd avec la conversion du format d'une chaine de caractères ? ^^ C'est juste pour l'affichage des caractères que je t'ai dit de faire ça :D C'est quoi le souci exactement maintenant ? Code erreur ? Ligne avec l'erreur ?

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 2:27 pm
par twin
Quelle réactivité ! ;)
Ce que je souhaite c'est que lorsqu'on arrive sur h*ttp://www.toilef1.fr/commentaires.php il est y les caractères qui s'affichent en Iso8859-1. Actuellement la page se charge correctement et se met en iso; mais le problème sont les accents qui ne se convertisses pas.

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 2:29 pm
par Yoyo
quand je vais sur ta page commentaires.php, je vois que la page est en UTF-8 :s Maintenant faut voir dans la page qui appelle commentaires.php, car la aucun problème d'accent :D

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 2:39 pm
par twin
Tu as aucun problème d'accent lorsque tu es en UTF-8. Mais si tu passe ton navigateur en Iso, tu vas avoir le problème d'accent. Et c'est ce que je recherche à faire; que l'on puisse être en Iso sur la page et ne pas avoir des problèmes d'accents.

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 3:02 pm
par Yoyo
Déjà pour indiquer un le charset que tu veux utiliser, tu as deux choix. Envoyer un header en php, un code à placer comme ceci tout en haut:

Code: Tout sélectionner
header('Content-Type: text/html; charset=iso-8859-1'); 


Ou avec une balise meta dans le code html:

Code: Tout sélectionner
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 


Comme ça, j'aurais vu la page directement en en iso-8859-1 par défaut et donc j'aurais vu le problème d'accent.

Et ensuite, vu que ta page est encodée en utf8, il faut convertir les chaines avant chaque echo 'ma chaine'; ou echo $chaine; comme ceci: echo utf8_decode('ma chaine'); ou bien des utf8_decode($chaine);

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 3:51 pm
par twin
Houla, j'ai du mal à comprendre.
J'ai ma ligne :
Code: Tout sélectionner
<a href="<?php echo $postresult[2]; ?>" rel="bookmark" title=' du blog F1 : "<?php echo $postresult[1]; ?>"' target="_blank"> - <?php echo $postresult[1]; ?></a>

Je souhaite changer :
Code: Tout sélectionner
<?php echo $postresult[1]; ?></a>


j'écrit :
Code: Tout sélectionner
<?php echo utf8_decode('$postresult'); $postresult[1]; ?></a>


?

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 3:57 pm
par Yoyo
Euu non :mrgreen:

Simplement:

Code: Tout sélectionner
<?php echo utf8_decode($postresult[1]); ?></a>


comme dis plus haut 8)

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 4:08 pm
par twin
Yes, yes, yes, et encore yes !
Merci beaucoup; çà marche, et c'est pas faute d'avoir passé du temps la dessus. C'est génial, je te remercie :)

Par contre, je profite de tes compétences pour une autre question.

Sur la page commentaires, des titres sont en MAJUSCULES - je souhaite les faire passer en minuscule en css (jusqu'à, aucun problème) - mais est-ce qu'il est possible d'avoir uniquement la première lettre en MAJ ? ;)

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 4:15 pm
par Yoyo
Et voila chef, tu fais un
Code: Tout sélectionner
strtolower() 
http://be.php.net/manual/fr/function.strtolower.php pour tout mettre en minuscule, puis un
Code: Tout sélectionner
ucfirst() 
http://be.php.net/ucfirst pour mettre la première lettre en majuscule ^^ . Mais c'est en php et pas en css :)

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 4:34 pm
par twin
Super...ça va semblé idiot; mais je me suis bien amusé avec tes bouts de code.
C'est niquel en tout cas; il ne reste plus qu'à savoir pour afficher que certains blogs ;)

Je te remercie énormément. Je suis content d'avoir trouvé se forum (merci wri) pour recevoir de l'aide en apprendre un peu en php

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Ven Sep 05, 2008 4:39 pm
par Yoyo
Le forum est fait pour ça, hésite pas à créer un autre post en détaillant ton problème si un autre souci arrive :shock: :D

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Dim Sep 14, 2008 7:13 pm
par Valbuena72
c'est toujours marrant de donne du boulot a yoyo :mrgreen:
moi j'ai fait une pause sinon il allait me mettre une claque :mrgreen:

bref yoyo aide beaucoup (trop :boulay: )
j'ai eu le meme problème pour les adresse mial d'un script commentaires

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Sep 16, 2008 12:40 am
par araadon
Bonsoir a tous,
je suis nouveau sur ce forum et j'aurai besoin d'aide.
J'ai rapatrié de mon serveur ma Bdd, qui est enregistré sur mon ordi.
J'ai effacé par la suite ma bdd sur le serveur.
Le fichier est sous forme xxxxx.sql
Je voulais l'exporter à nouveau, mais me suis rendu compte que toutes les accentuations ont été modifiées,
exemple d'un mot : réfugiés devient réfugiés
Y a til un moyen pour pour rectifier ces erreurs que contient mon fichier (7,8 MO)
Dernière précision : je n'ai aucune compétence en programmation.

D'emblée je vous en remercie
Cordialement.

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Sep 16, 2008 12:47 am
par Yoyo
Si ta base de données est en utf8, tu modifies le format des tables en utf8. Actuellement elles sont surement en latin1, d'où le problème !

Bonne soirée .

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Sep 16, 2008 12:50 am
par araadon
Merci pour votre réponse,
pour le moment je souhaite convertir juste le fichier que j'ai sur mon ordi
es - ce possible?
cordialement

Re: Convertir encodage des caractéres UTF8 et ISO8859-1

MessagePosté: Mar Sep 16, 2008 1:09 am
par Yoyo
Je ne crois pas, le mieux serait de l'importer dans le format dans lequel elle a été exportée, ce serait plus logique.