lundi, novembre 17 2008, 16:20
Websvn 2.0 comment afficher correctement les caractères accentués?
Par Jean-Pascal MILCENT - Lien permanent
Vous avez des projets encodés en ISO-8859-15 ou ISO-8859-1 et les accents apparaissent mal dans Websvn 2.0, ce petit article est fait pour vous !
Si vous avez des projets dans votre Subversion non encodés en UTF-8, en ISO-8859-15 ou ISO-8859-1 par exemple, il y a de grande chance pour que les accents apparaissent mal dans Websvn 2.0. Voici ce que nous avons fait à Tela Botanica pour résoudre ce problème.
Fichier include/config.php
Pour la section LANGUAGE SETUP, décommenter seulement les lignes contenant :
$config->setContentEncoding('ISO-8859-15'); Indiquer ici votre encodage autre que UTF-8 utilisé par vos projets
$config->setDefaultLanguage('fr'); Indiquer ici votre langue.
Pour l'instant, un rapide tour du code de Websvn semble montrer que les lignes suivantes ne fonctionnent pas :
//$config->setContentEncoding('utf-8', 'MyEnc');
On peut donc seulement avoir des projets hébergés dans le dépôt dans deux encodages distincts : UTF-8 et un autre au choix (ici ISO-8859-15).
Fichier include/svnlook.php
Juste avant la méthode listFileContents vers la ligne 546 ajouter le code suivant :
/**
* Méthode permettant de détecter réellement l'encodage utf8.
* mb_detect_encoding plante si la chaine de caractère se termine par un caractère accentué.
* Provient de PHPDIG.
*
* @param string la chaine à vérifier.
* @return bool true si c'est de l'utf8, sinon false.
* @access private
*/
private function _detecterUtf8($str) {
if ($str === mb_convert_encoding(mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32')) {
return true;
} else {
return false;
}
}
Dans la méthode "listFileContents" ajouter :
- après la ligne contenant : $tmpStr = file_get_contents($tmp); le code suivant :
// Si nous n'avons pas à faire à de l'utf8 nous effectuons un remplacement
if (! $this->_detecterUtf8($tmpStr)) {
$tmpStr = toOutputEncoding($tmpStr);
}
- après la ligne contenant : $line = fgets($result, 1024); le code suivant :
// Si nous n'avons pas à faire à de l'utf8 nous effectuons un remplacement
if (! $this->_detecterUtf8($line)) {
$line = toOutputEncoding($line);
}
- après la ligne #756 contenant $line = fgets($handle); dans la méthode getLog() ajouter le code suivant :
// Nettoyage des lignes non utf8
if (!$this->_detecterUtf8($line)) {
$line = toOutputEncoding($line);
}
Voilà, tout les accents devraient apparaître normalement dans les projets en ISO-8859-15 comme pour ceux en UTF-8.
aucun commentaire