Page 1 sur 1

Accent non reconnu dut à une fonction php

Posté : 20 mai 2016, 16:07
par yoann38
Salut à tous.
J'utilise la fonction strtolower ( lettres en minuscule ), si je met :
<a href="product_detail.html" title="'.ucfirst(strtolower($ligne['titre'])).'">'.ucfirst(strtolower($ligne['titre'])).'</a>
ça me retourne : Les d�v�rouill�s

Si j'enleve la fonction ca me renvoi du coup: Les Dévérouillés

Qu'est ce qui peut poser pbm svp ?
Merci à vous

Re: Accent non reconnu dut à une fonction php

Posté : 20 mai 2016, 17:56
par Ryle
Bonjour,

C'est à priori un problème d'encodage de ta chaîne vs l'encodage de ton script, serveur, local, toussa...
Tu peux essayer avec mb_strtolower() en précisant que ta chaîne est en iso-8859-1 ou 15 au lieu de l'utf-8 qui doit être utilisé par défaut... (ou en utf-8 au lieu d'iso selon le cas)

Re: Accent non reconnu dut à une fonction php

Posté : 20 mai 2016, 18:26
par yoann38
oki c'est bon ca roule ;)

Re: Accent non reconnu dut à une fonction php

Posté : 22 mai 2016, 12:47
par yoann38
Heu en faite non, ca marche pas, je comprends vraiment pas pourquoi de plus ma déclaration est bonne, enfin je pense:

<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

C'était juste pour comprendre ce problème d'encodage car effectivement en faisant comme tu ma dit ca marche:
Infos à '.mb_strtolower($recent_actu['city'], 'UTF-8').'

Re: [RESOLU] Accent non reconnu dut à une fonction php

Posté : 22 mai 2016, 16:13
par Ryle
Bonjour,

Est-ce que les valeurs de $ligne['titre'] ou $recent_actu['city'] proviennent d'un formulaire html (get/post) ? de la base de données ? d'un fichier ?

Dans le meta de ta page, tu dis au navigateur que ce que tu lui envois est de l'utf-8 pour qu'il puisse l'afficher correctement à l'écran. Si tu as des caractères abscons, c'est qu'à un moment ce que tu lui envois n'est pas encodé en utf8, mais en autre chose (ascii, unicode, oem...).

En l'occurrence quand tu fais appel à strToLower(), php va utiliser le jeu de caractère local du serveur. Si celui-ci est en ISO, la chaîne générée en minuscule sera en iso, et comme dans ton meta tu indiques au navigateur qu'il reçoit c'est de l'utf-8, il l'affiche comme il peut :) Avec mb_strToLower() tu indiques à php de ne pas se baser sur le jeu de caractère local, mais d'impérativement transformer la chaîne en restant sur de l'utf-8 :)

(Si tu as la main dessus, tu peux aussi modifier les paramètres du serveur pour changer la valeur par défaut et pas être embêté :))