Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3009 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [résolu]probleme entre fonction et regex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu]probleme entre fonction et regex

n°1311869
Droopy4eve​r
Posté le 22-02-2006 à 22:30:09  profilanswer
 

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
mood
Publicité
Posté le 22-02-2006 à 22:30:09  profilanswer
 

n°1311877
nargy
Posté le 22-02-2006 à 22:47:50  profilanswer
 

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

n°1311900
Droopy4eve​r
Posté le 22-02-2006 à 23:13:13  profilanswer
 

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.

n°1312045
omega2
Posté le 23-02-2006 à 11:12:19  profilanswer
 

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.

n°1312066
nargy
Posté le 23-02-2006 à 11:35:22  profilanswer
 

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.
 

n°1312653
Droopy4eve​r
Posté le 23-02-2006 à 21:14:42  profilanswer
 

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

n°1312825
soju
One shot !
Posté le 24-02-2006 à 09:06:18  profilanswer
 

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

n°1313064
nargy
Posté le 24-02-2006 à 15:11:44  profilanswer
 

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.


 
 

n°1313087
omega2
Posté le 24-02-2006 à 15:28:34  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [résolu]probleme entre fonction et regex

 

Sujets relatifs
[resolu]découper une chaineprobleme avec getElementById
probleme compilation Qt[visual 2003] [ifstream] problème de tellg en ios::binary
VC++ -> add existing item to a project => problème?!Comment ajouter une page [RESOLU]
Problème à la noix sur tableau de valeur JS/HTML[ MySQL 4.1 ] Créer une fonction MySQL
Probleme de variables et de boucle (DOS)[js]probleme de champs grisés
Plus de sujets relatifs à : [résolu]probleme entre fonction et regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR