[résolu]probleme entre fonction et regex

probleme entre fonction et regex [résolu] - PHP - Programmation

Marsh Posté le 22-02-2006 à 22:30:09    

Bonsoir,
 
Je réalise une encyclopédie sur le seigneur des anneaux et pour tous ceux qui connaissent, beaucoup de nom contiennent des accents. Ce n'est pas un problème en soi mais j'ai du mal pour créer mes liens car j'utilise un script en php qui me permet d'éditer mes articles via mon site.
 
Donc j'ai utilisé dans mon script une regex pour créer mes liens :
 

Code :
  1. $article = preg_replace('!\[url\](.+)\[/url\]!isU', '<a href="$1.html"><b>$1</b></a>', $article);

 
 
Les liens marchent bien sous mozilla mais pas sous i.e qui ne lit pas les liens avec des accents (ex: Fëanor.html). J'ai donc décidé d'enlever les accents et les blancs avec une fonction :
 

Code :
  1. function enleve_accent($chaine){
  2.     $accents = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ";
  3.     $sans_accents = "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy";
  4.     $chaine = strtr($chaine, $accents, $sans_accents);
  5.     $chaine = preg_replace('/([^.a-z0-9]+)/i', '_', $chaine);
  6.     return $chaine;
  7.     }
  8. $article = preg_replace('!\[url\](.+)\[/url\]!isU', '<a href="enleve_fonction($1).html"><b>$1</b></a>', $article);


 
Le code ne marche pas mais j'ai essayé de trouver une solution et j'ai fait ça:
 

Code :
  1. $article = preg_replace('!\[url\](.+)\[/url\]!isU', '<a href="<?php echo enleve_accent('$1'); ?>.html"><b>$1</b></a>', $article);

 
 
puis après validation de mon script "d'édition", il écrit ce code dans mon article :
 

Code :
  1. <?php
  2.     function enleve_accent($chaine){
  3.     $accents = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ";
  4.     $sans_accents = "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy";
  5.     $chaine = strtr($chaine, $accents, $sans_accents);
  6.     $chaine = preg_replace('/([^.a-z0-9]+)/i', '_', $chaine);
  7.     return $chaine;
  8.     }
  9.     ?>
  10. bla bla bla <a href="<?php echo enleve_accent('F&euml;anor'); ?>.html"><b>Fëarnor</b></a>


 
Cependant il ne m'écrit pas Fëanor mais F&euml;anor donc il ne me remplace pas mes accents et il m'écrit comme lien F_euml_anor.html.
 
Donc je voulais savoir si c'était possible de remplacer mes accents directement dans la regex ?
N'étant pas programmeur de formation je suis à court d'idée  :sweat:  
 
Je vous remercie d'avance pour vos réponses


Message édité par Droopy4ever le 23-02-2006 à 21:14:58
Reply

Marsh Posté le 22-02-2006 à 22:30:09   

Reply

Marsh Posté le 22-02-2006 à 22:47:50    

1- essaye la fonction ereg() plutot
2- laisse tomber les accents, tout ce qui est à l intérieur d un attribut HTML (donc href) doit être passé à htmlentities() qui se charge des accents

Reply

Marsh Posté le 22-02-2006 à 23:13:13    

j'utilise déjà le htmlentities() sur ma variable $article. Je suis vraiment dans le flou et je ne connais pas ereg(). J'ai fait le tour des site qui traite de la fonction ereg() mais je ne comprend rien. Je ne suis pas programmeur de base donc j'ai vrt du mal avec le codage.

Reply

Marsh Posté le 23-02-2006 à 11:12:19    

Pour créer des adresses il y a "urlencode". C'est fait pour ça alors autant l'utiliser.
"htmlentities" est faite pour afficher sans risque ni ambiguité du texte dans un navigateur. Elle n'est pas faite pour modifier des adresses.

Reply

Marsh Posté le 23-02-2006 à 11:35:22    

exact, il manque urlencode:
href=htmlentities(urlencode(url))

Citation :


"htmlentities" est faite pour afficher sans risque ni ambiguité du texte dans un navigateur.


...Ainsi que dans les attributs des tags.
 

Reply

Marsh Posté le 23-02-2006 à 21:14:42    

Merci à vous deux pour vos réponse. j'ai finalement choisi d'utiliser ereg_replace et mon système marche bien maintenant.

Reply

Marsh Posté le 24-02-2006 à 09:06:18    

preg est nettement plus efficace pourtant (rapidité/fonctionnalités)
et urlencode tout seul suffit (=> F%EBanor et non F%26euml%3Banor par exemple)

Reply

Marsh Posté le 24-02-2006 à 15:11:44    

De w3.org:
Tag <A>, attribut href, type %URI de type CDATA:

Citation :


CDATA is a sequence of characters from the document character set and may include character entities. User agents should interpret attribute values as follows:
 
    * Replace character entities with characters,
    * Ignore line feeds,
    * Replace each carriage return or tab with a single space.


 
 

Reply

Marsh Posté le 24-02-2006 à 15:28:34    

nargy > traduction :  
F%EBanor sera retransformé en Fëanor
F%26euml%3Banor sera retransformé en F%EBanor  
F%26euml%3Banor ne sera pas retransformé en Fëanor
 
Les entités de caractéres étant retransformé en caractére normal mais il n'est pas prévus que ca soit fait de maniére récursive.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed