8768 sujets

Développement web côté serveur, CMS

Bonjour à tous

Je suis en train de faire un programme PHP qui convertit des pages "à l'ancienne" en format "à la mode" en utilisant les facilités offertes par l'objet DOMdocument de PHP.

Je tombe sur un problème sans grande importance,mais ça me préoccupe de ne pas parvenir à le résoudre.
Pour des raisons que je ne connais pas, l'auteur des anciennes pages écrivait:
<a href="javascript:PopupImage%20('...')%20">...</a>

Comme son nom l'indique, le script "PopupImage" ouvre une nouvelle fenêtre qui affiche une image en plein écran. Cette fonction est très importante pour un site qui comporte des milliers d'images de bonne qualité: le texte explique le contexte de ces images, avec des images miniatures d'environ 100 à 200 pixels de large, et en cliquant sur la miniature on peut afficher l'image en taille réelle.

Je cherche à me débarrasser de ces "%20" par
str_replace('%20', '', $text);
mais cela n'a aucun effet, de même si j'écris
preg_replace('#\%20#', '', $text);

Je suppose que ces "caractères spéciaux" font l'objet d'un traitement particulier en PHP, mais n'ai rien trouvé dans la doc qui explique ce comportement.
Auriez vous une idée sur la façon de procéder à de "nettoyage?

Merci de votre aide.
PapyJP a écrit :
Bonjour à tous

Je suis en train de faire un programme PHP qui convertit des pages "à l'ancienne" en format "à la mode" en utilisant les facilités offertes par l'objet DOMdocument de PHP.

Je tombe sur un problème sans grande importance,mais ça me préoccupe de ne pas parvenir à le résoudre.
Pour des raisons que je ne connais pas, l'auteur des anciennes pages écrivait:
&lt;a href="javascript:PopupImage%20('...')%20"&gt;...&lt;/a&gt;

Comme son nom l'indique, le script "PopupImage" ouvre une nouvelle fenêtre qui affiche une image en plein écran. Cette fonction est très importante pour un site qui comporte des milliers d'images de bonne qualité: le texte explique le contexte de ces images, avec des images miniatures d'environ 100 à 200 pixels de large, et en cliquant sur la miniature on peut afficher l'image en taille réelle.

Je cherche à me débarrasser de ces "%20" par
str_replace('%20', '', $text);
mais cela n'a aucun effet, de même si j'écris
preg_replace('#\%20#', '', $text);

Je suppose que ces "caractères spéciaux" font l'objet d'un traitement particulier en PHP, mais n'ai rien trouvé dans la doc qui explique ce comportement.
Auriez vous une idée sur la façon de procéder à de "nettoyage?

Merci de votre aide.

Au cas où... je pose la question car je me suis déjà fait avoir en Java sur un problème de substitution de caractères.
Est ce que tu réaffectes bien le résultat de l'opération à la variable d'origine ?
Je n'ai pas vérifié comment fonctionne PHP (réponse depuis un portable) mais dans mon cas j'avais simplement oublié cette réaffectation en Java, pensant a priori que le terme "replace" agissait directement sur le texte en question au lieu de renvoyer la nouvelle version dudit texte.
Vu ton niveau, je ne pense pas que la réponse soit là, mais on a parfois des surprises, alors je te soumets cette piste, au cas où donc.
sepecat a écrit :

Au cas où... je pose la question car je me suis déjà fait avoir en Java sur un problème de substitution de caractères.
Est ce que tu réaffectes bien le résultat de l'opération à la variable d'origine ?
Je n'ai pas vérifié comment fonctionne PHP (réponse depuis un portable) mais dans mon cas j'avais simplement oublié cette réaffectation en Java, pensant a priori que le terme "replace" agissait directement sur le texte en question au lieu de renvoyer la nouvelle version dudit texte.
Vu ton niveau, je ne pense pas que la réponse soit là, mais on a parfois des surprises, alors je te soumets cette piste, au cas où donc.

Tu fais bien de me signaler cette possibilité, car le plus souvent c'est ce genre de c... qu'on ne voit pas et qu'on est très heureux de se faire signaler par un autre.
Mais hélas ce n'est pas le cas cette fois.
Voici le code en question:
$arrText = preg_replace('#\%20#', '', $arrText);

"$arrText" parce que c'est une fonction function arrangeHTML($htmlText) qui reprend tout le code HTML de l'ancienne page et lui fait subir des transformations pour "l'arranger" à ma sauce avant de lui faire subir d'autres tortures.
Modifié par PapyJP (12 Aug 2016 - 15:29)
On peut voir un bout de code concret ?

Parce que normalement il n'y a pas de raison non. Pour une solution générale à tous les %XX, utiliser la fonction urldecode.
Bonjour !

J'ai repris vos bouts de code et que ce soit avec 'preg_replace' ou 'str_replace', ça fonctionne.

Donc, je ne vois pas pourquoi ça ne fonctionne pas chez vous.

Smiley smile
Zelena a écrit :
Bonjour !

J'ai repris vos bouts de code et que ce soit avec 'preg_replace' ou 'str_replace', ça fonctionne.

Donc, je ne vois pas pourquoi ça ne fonctionne pas chez vous.

Smiley smile

Merci, voilà qui est encourageant. J'ai dû faire un raté quelque part, je vais reprendre le truc à la base.
La difficulté c'est que ça s'applique à toute une page HTML, difficile d'isoler un petit bout, mais je vais faire une page de test pour essayer de comprendre d'où peut bien venir ce fichu problème.
Premier résultat de mes recherches: les %20 ne sont pas dans le fichier original, contrairement à ce dont j'étais persuadé. Je dois avoir dans un coin un bout de code qui les ajoute!! Yapuka trouver où dans mes 2000 et quelques lignes de code, mais maintenant que je sais ce que je dois chercher, ça ne devrait pas être trop difficile.
Merci d'avoir orienté ma recherche dans la bonne direction.