YOURLS: résoudre les problèmes d'affichage des caractères spéciaux

YOURLS est un ensemble de scripts PHP permettant de créer son raccourcisseur d’URL sur un nom de domaine que l’on possède. Ce type de services est bien pratique notamment pour twitter puisque n’autorisant qu’un nombre limité de caractères dans un message. Par exemple à chaque fois que je publie un article sur mon blog, un tweet est automatiquement envoyé contenant l’url raccourcie de l’article en question du style u.yann.me/9oWJD.

J’ai donc installé YOURLS sur mon hébergement et je l’utilise depuis maintenant presque 3 mois en utilisant une base de données MySQL. Par habitude j’avais configuré cette BDD en UTF-8 (utf8_general_ci) puisque cet encodage permet de représenter l’ensemble des caractères Unicode, c’est-à-dire la majorité des alphabets du monde entier (voir la liste).

Du coup je sais pas si ça vient de là mais ça fait trois mois que j’utilise un pannel admin de YOURLS qui ressemble à ça:

YOURLS: le pannel admin avec problèmes d'affichage des caractères

Tout ces petits accents qui se transforment en losanges contenant un point d’interrogation c’est pas super sympa à utiliser donc j’ai cherché une solution et elle est toute bête: il faut définir l’encodage à utiliser lors de la connexion à la BDD.

C’est simple mais faut mettre les mains dans le camboui alors je vais vous expliquer. Tout d’abord rendez-vous dans votre dossier qui contient YOURLS et cherchez pour le fichier «class-mysql.php» contenu dans le dossier «includes». À l’intérieur de se fichier vous devriez trouver le code suivant autour de la ligne 270:

### ezSQL MYSQL Class
class ezSQL_mysql extends ezSQLcore {

	## Constructor - allow the user to perform a qucik connect at the same time as initialising the ezSQL_mysql class
	function ezSQL_mysql($dbuser='', $dbpassword='', $dbname='', $dbhost='localhost') {
		if ($dbuser && $dbname) {
			$this->quick_connect($dbuser, $dbpassword, $dbname, $dbhost);
		}
	}

Il vous suffit de rajouter «$this->query( » SET CHARACTER SET utf8 « );» juste après l’appel de la fonction «quick_connect» pour obtenir quelque chose comme ça:

### ezSQL MYSQL Class
class ezSQL_mysql extends ezSQLcore {

	## Constructor - allow the user to perform a qucik connect at the same time as initialising the ezSQL_mysql class
	function ezSQL_mysql($dbuser='', $dbpassword='', $dbname='', $dbhost='localhost') {
		if ($dbuser && $dbname) {
			$this->quick_connect($dbuser, $dbpassword, $dbname, $dbhost);
			$this->query(" SET CHARACTER SET utf8 ");
		}
	}

Une fois ce fichier modifié vous ne devriez plus avoir de problèmes d’affichage. Chez moi ça fait deux semaines que j’ai mis en place ce morceau de code et tout semble tourner parfaitement bien comme vous pouvez le voir sur le screenshot ci-dessous:

YOURLS après la résolution du problème d'affichage des caractères

Source

Commentaires