Forum de discussions pour les webmasters et les web developpeurs. (PHP, SQL, XHTML, JavaScript, Référencement, Positionnement,...)
Vous n'êtes pas identifié.
Bonjour,
Voici le casse tête du jour!
Dans la tentative de rendre un des mes sites dynamique, je tente de le "CMSardisé" ![]()
J'ai un petit soucis sur cette fonction: mes "é" sont remplacés par des "b".
Si j'écris les mots "créer un site" j'obtient "crb-er-un-site" .. ![]()
<?php
//fonction de transformation de chaine de caractères
function reecritureUrl($lien)
{
$accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
$noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
$reecriture=strtr(trim($lien),$accent,$noAccent);
$url=preg_replace('/[^0-9a-z]/', ' ', strtolower($reecriture));
$url=preg_replace('/ +/', '-', trim($url));
return $url;
}
include("data_bd.php");
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir
correctement remplit les données du fichier data_bd.php.');
$query = mysql_query("SELECT id, titre_de_la_page FROM PAGE_DU_SITE WHERE
categorie_de_la_page='".mysql_real_escape_string($idtransmit)."'");
$id_de_la_page="";
$titre_de_page="";
while($titrepage = mysql_fetch_array($query))
{
$id = $titrepage['id'];
$id_de_la_page.="$id";
$titre_de_la_page = $titrepage['titre_de_la_page'];
$titre_de_page.="$titre_de_la_page";
$lien=html_entity_decode($titre_de_la_page);
echo '<a href="'.reecritureUrl($lien).'-'.$id.'.php">Version reecrite</a>';
}
mysql_close();
?>Je prend toutes suggestions sur le pourquoi du comment .
note:hébergement ovh, 1er offre ^^ Start G1 me semble t'il et si sa peut aider !
Merci
Hors ligne
Tu peu utiliser cette fonction la:
http://www.zone-webmasters.net/code-php … d-url.html
Normalement elle fonctionne correctement.
c00lman a écrit:
Je prend toutes suggestions sur le pourquoi du comment .
note:hébergement ovh, 1er offre ^^ Start G1 me semble t'il et si sa peut aider !
Merci
Cela peu jouer sur la réécriture avec ton fichier .htaccess, mais pour le code PHP je ne pense pas, à moins que le moteur PHP soit configuré pour travailler en UTF-8, mais cela m'étonnerait.
Hors ligne
Merci Crocxx,
Je viens de tenter avec ton code et le résultat est pour ainsi dire quasi identique
. Mes "é" sont remplacés par des "un" soit pour "créer" j'obtiens "cruner" !
Je ne pige pas !!!!
J' ai viré mon htaccess et sa na rien changé, j'ai modifier mon champ de type TEXT pour le mettre en VARCHAR latin1_general_ci, sa ne change rien, idem en utf8.
Quelque soit la fonction d'écriture utilisé je suis ennuyé avec les "é".
Hors ligne
C'est typiquement une histoire d'utf-8 (encodé sur 2 octets pour les lettres accentuées).
Regarde si ton fichier est encodé en utf-8 (cela doit être le cas) et met le en latin.
Sinon si tu veut travailler en utf-8 voila la fonction que j'utilise personnellement:
function OptimiseUrl($chaine)
{
$chaine=strtolower($chaine);
$accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/","/å/", "/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
$sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", "i", "u", "o", "o", "o", "o");
$chaine = preg_replace($accents, $sans,$chaine);
$chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine);
while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine);
return $chaine;
}![]()
Hors ligne
Bon c'est cool, sa fonctionne avec ton aide
.
Pour reprendre les chose dans l'ordre:
1-Vérifier le Jeu de caractères utiliser pour MySQL ISO UTF-8 ..etc
2-Utiliser le bon Content-Type soit charset=utf-8 si mysql tourne sous utf-8
3-Coder avec un logiciel adéquate qui utilise le même jeux de caractères (notepad++).
Ceci dit, il me semble bien avoir déjà essayé en UTF-8 et sans succès .. de plus mon domaine de teste est un domaine sur lequel je possède un annuaire utilisant un Content-Type en charset=iso-8859-1 et fonctionnant très bien ainsi.
Du coup ma question est pourquoi UTF-8 obligatoire pour mon petit code perso alors que l'autre tourne normalement en iso-8859-1 ..?
Hors ligne
Si tes tables que tu utilise ainsi que ton fichier et ton Content-Type sont tous les trois en iso-8859-1 cela devrai fonctionner de la même manière.
Mais peu être que les données dans ses tables sont en utf-8 ce qui ta obligé à l'utiliser.
Hors ligne