aidez moi à améliorer une fonction :( regex ? [PHP] - PHP - Programmation
Marsh Posté le 22-10-2002 à 16:36:41
str_replace ne marche pas?
http://www.php.net/manual/fr/function.str-replace.php
Marsh Posté le 22-10-2002 à 16:38:56
Fred999 a écrit a écrit : str_replace ne marche pas? http://www.php.net/manual/fr/function.str-replace.php |
c ce que je faisais au début, mais le pb, c'est qu'il remplace partout, sans discerner les balises HTML du reste de la chaîne. Et moi je ne veux rien modifier dans les balises HTML, juste à l'extérieur.
Marsh Posté le 22-10-2002 à 16:42:43
Je vois mal comment optimiser une telle fonction. Son seul et principal avantage par rapport à str_replace() c'est justement le fait que les balises HTML sont détectées. Et pour ça, pas de miracle, faut parser la chaîne caractère par caractère.
Je pense qu'il doit être possible de faire une expression régulière qui te fasse tout le boulot d'un seul coup, mais je ne connais pas assez bien ce mécanisme pour t'aider
Enfin bref, si optimisation il y a, cherche du côté des expressions régulières, pas de l'algorithmie.
Marsh Posté le 22-10-2002 à 16:42:53
Alors, il faudrait séparer les balises HTML du reste, et recoller les morceaux après...
Sinon, j'vois pas bien comment faire + vite
Marsh Posté le 22-10-2002 à 16:43:27
z0rglub a écrit a écrit : // - The function replace_space replace caracters space and - // in a string by their HTML equivalent : &nbsb; et &minus |
- The replace_space function replaces space and '-' characters by their HTML equivalent &nbsb; and −
z0rglub a écrit a écrit : // - The function do not replace caracters in HTML tags |
- The function does not replace characters in HTML tags
z0rglub a écrit a écrit : // - This function was created be cause IE5 did not respect // the CSS property white-space : nowrap; unless space and minus // caracter are replaced like this function does |
- This function was created because IE5 does not respect the CSS "white-space: nowrap;" property unless space and minus characters are replaced like this function does.
C'est déjà mieux comme ça
Marsh Posté le 22-10-2002 à 16:45:56
greg a écrit a écrit : C'est déjà mieux comme ça |
t'as carrément raison de me corriger mes fautes d'anglais. C sympa.
tu maîtriserais pas les regex en plus ?
Marsh Posté le 22-10-2002 à 16:57:57
Pourquoi ne pas essayer ça :
Ex de texte
$chaineinitiale= efnpeznf ipeznfp inezinf p http://www.fzefezf.com efnpeznf ipeznfp inezinf p efnpeznf ipeznfp inezinf p efnpeznf ipeznfp inezinf p efnpeznf ipeznfp inezinf p http://www.fefef.com zefezfezf hytjk-uokyi
Pour le traiter :
1er-> Cherche la première Occurence [URL]
2ème -> Affecter à une variable $chainetraitee la chaine 0 jusqu'à la position de renvoyée précédemment.
3ème - [...] occurence
5ème -> $chainetraitee= valeur de la chaine entre Pos[url] et Pos [/URL+4]
6ème -> $Chainefinale=$Chainefinale.$chainetraitee
7ème-> $Chaineinitiale= valeur de $chaineinitiale entre Pos[/URL+4] jusqu'à la fin
Et ainsi de suite...
Marsh Posté le 22-10-2002 à 16:58:08
Marsh Posté le 22-10-2002 à 17:01:51
Format_c a écrit a écrit : Pourquoi ne pas essayer ça : Ex de texte
|
y'a de l'idée, faut voir si j'y arrive.
Marsh Posté le 22-10-2002 à 17:04:59
z0rglub a écrit a écrit : y'a de l'idée, faut voir si j'y arrive. |
Mon explication et fouilli mais c'est juste une boucle utilisant 2 fonctions en pratique
Le but étant de construire $ChaineFinale à artir d'un $Chaineinitiale qui rétrécit au fure et à mesure.
PS : pour savoir combien de fois il faut boucler, il faut compter le nbre d'occurences ou
Marsh Posté le 22-10-2002 à 17:06:46
non non, t'as très bien expliqué, pas de pb. Je vais considérer qu'une balise HTML commence par "<" et finit par ">", si qqun s'amuse à mettre des caractères comme ça (au lieu des < et > ), ça déconnera, mais c pas grave...
Marsh Posté le 22-10-2002 à 17:12:16
z0rglub a écrit a écrit : non non, t'as très bien expliqué, pas de pb. Je vais considérer qu'une balise HTML commence par "<" et finit par ">", si qqun s'amuse à mettre des caractères comme ça (au lieu des < et > ), ça déconnera, mais c pas grave... |
Ne mais pas seulement < et > !!!
Si jamais ta balise est <HTML></HTML> ça prendra en compte le premier < et le 1er >, c'est à dire celui qui est en pos 5 et pas en dernière...
Mais la balise complète, c'est plus sûr
Si t'as peur que quelqu'un mette une balise de ce type qui fasse foirer, t'as qu'à remplacer dans la variable non encore traitée (celle que renvoie l'Input) ces balises par '' et ensuite tu fait ton traitement qui te renverra $ChaineInitiale
Marsh Posté le 22-10-2002 à 17:15:38
non non, j'autorise toutes les balises html (c pas pour un forum, seuls les admins peuvent toucher le texte)
Marsh Posté le 22-10-2002 à 17:24:51
z0rglub a écrit a écrit : y'a de l'idée, faut voir si j'y arrive. |
strpos ou str_pos
je sais plus l'ortographe exacte de la fonction mais c'est celle qui permet de trouver une chaine de caractère dans une autre a partir d'une position donné.
Marsh Posté le 22-10-2002 à 17:25:38
ReplyMarsh Posté le 22-10-2002 à 18:05:16
z0rglub a écrit a écrit : t'as carrément raison de me corriger mes fautes d'anglais. C sympa. tu maîtriserais pas les regex en plus ? |
po du tout
(ça existe des gens qui maitrisent vraiment ça ?? )
Marsh Posté le 22-10-2002 à 18:58:04
hum...
g pas le temps de faire un algo, mais ça ressemble un peu à ce que j'ai fait pour optimiser fastTemplates.
- découpe en tableau
- parse des parties intéressantes
- implode une fois fini.
sinon tu peux faire une regexp avec (mais c plus lent)
extraction des (*)<(*)>(*) et exécution d'une fonction sur \\1 et \\3
Code :
|
Marsh Posté le 22-10-2002 à 18:59:12
bon alors voilà ma fonction refaite, qui est bcp plus rapide et plus propre :
Code :
|
Marsh Posté le 22-10-2002 à 19:31:56
z0rglub a écrit a écrit : bon alors voilà ma fonction refaite, qui est bcp plus rapide et plus propre : |
Alors elle est pas belle la vie ?
Marsh Posté le 22-10-2002 à 19:36:45
Format_C a écrit a écrit : Alors elle est pas belle la vie ? |
si, j'ai passé du temps dessus, parce qu'il y avait un petit bug de PHP qui considéré que if ( $start = la fonction ) et que la fonction lui retournait 0, ct comme un false...
Marsh Posté le 23-10-2002 à 01:20:52
z0rglub a écrit a écrit : si, j'ai passé du temps dessus, parce qu'il y avait un petit bug de PHP qui considéré que if ( $start = la fonction ) et que la fonction lui retournait 0, ct comme un false... |
fo mettre $start!==false, c'est là que ce foutu opérateur === entre en jeux
Marsh Posté le 22-10-2002 à 16:20:11
salut à tous, j'ai une fonction qui prend bcp de temps à s'exécuter et j'aimerais trouver une optimisation.
exemple d'utilisation :
Vous voyez comment faire plus propre et surtout plus rapide ?
Message édité par z0rglub le 22-10-2002 à 16:44:29
---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com