remplacer une URL dans une string par une balise html [Résolu]

remplacer une URL dans une string par une balise html [Résolu] - PHP - Programmation

Marsh Posté le 23-08-2005 à 12:19:05    

Bonjour,
 
Je cherche une fonction pour remplacer
 
http://www.toto.org  
 
par
 
<a href="http://www.toto.org">http://www.toto.org</a>
 
dans une chaîne de caractères, ceci quelque soit l'url.
 
Bien à vous,
 
Reng.


Message édité par rengzehn le 24-08-2005 à 10:53:40
Reply

Marsh Posté le 23-08-2005 à 12:19:05   

Reply

Marsh Posté le 23-08-2005 à 12:21:57    

un truc comme ça tout simplement non ?
 

Code :
  1. function modif_url($url){
  2.    echo ("<a href=\"$url\">$url</a>" );
  3. }
  4. modif_url("http://toto.com" );



---------------
merci http://forum.hardware.fr !!
Reply

Marsh Posté le 23-08-2005 à 12:27:42    

http://fr.php.net/preg_replace
 
Doit y avoir la solution qqpart dans les commentaires, si t'as pas envie d'apprendre les regexp juste pour ça.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 23-08-2005 à 12:41:13    

pas besoin de regexp...enfin...

Reply

Marsh Posté le 23-08-2005 à 12:44:10    

xtof_83 a écrit :

pas besoin de regexp...enfin...


Heuuu pour faire des remplacements adaptatifs comme ça c'est quand même largement plus pratique :sweat:  
 
Surtout si tu veux linkifier des URL aléatoires sans contraintes (autre que de simples http://)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-08-2005 à 12:45:42    

oki, sa c'est vrai...
 
Enfin dans le cas présent m'étonnerais que le gars veule ce plonger la dedans...

Reply

Marsh Posté le 23-08-2005 à 13:27:49    

xtof_83 a écrit :

oki, sa c'est vrai...
 
Enfin dans le cas présent m'étonnerais que le gars veule ce plonger la dedans...


 
C'est quoi ton idée ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 23-08-2005 à 13:59:37    

Un truc du style: seb306bzh
 
Parce que je pense que c'est ça qu'il souhaite...
 
enfin on peux pas savoir ... faudrait qu'il nous le dise...

Reply

Marsh Posté le 23-08-2005 à 14:09:14    

Il veut faire les remplacements dans une chaîne de caractères qui contient autre chose qu'uniquement une url connue à l'avance, je suppose. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 23-08-2005 à 14:11:17    

sielfried a écrit :

Il veut faire les remplacements dans une chaîne de caractères qui contient autre chose qu'uniquement une url connue à l'avance, je suppose. :spamafote:


 
 
Dans ce cas là, milles escuses.... :jap:  :jap:

Reply

Marsh Posté le 23-08-2005 à 14:11:17   

Reply

Marsh Posté le 23-08-2005 à 14:14:12    

Tiens une portion simplifié de mon code.

Code :
  1. function bbcode($texte)
  2. {
  3. $bbcode= array (
  4. '/\[url=(.+?)\](.+?)\[\/url\]/si',
  5. '/\[img\](.+?)\[\/img\]/si'
  6. );
  7. $htmlcode= array (
  8. '<a href="$1">$2</a>',
  9. '<img src="$1" border="0" alt="Img" />'
  10. );
  11. return(preg_replace($bbcode,$htmlcode,$texte));
  12. }

Reply

Marsh Posté le 24-08-2005 à 09:52:58    

Hello, j'ai fouiné et bidouillé un peu c'est bon merci pour les réponses :)
 
Le but est de remplacer des url quelconque (que je ne connais pas d'avance) dans une string par une balise html qui contient l'url en question.
 

Code :
  1. $regex="{ \\b((https?|telnet|gopher|file|wais|ftp) : [\\w/\\#~:.?+=&%@!\\-]+?)\n"
  2. . "(?=[.:?\\-]*(?:[^\\w/\\#~:.?+=&%@!\\-]|$)) }x";
  3. echo preg_replace($regex, "<a href=\"$1\">$1</a>",$chaine_qui_contient_les_url)


 
l'expression régulière est pas jolie mais a l'avantage d'être robuste question parsage de l'url.
 
C'est pour faire une petite tribune pour mes potes cf :
 
http://peyo.lost-oasis.net/tribune/tribune.php  
 
comme ça si on met une adresse web dans la zone de texte, elle apparait bien en lien pour le navigateur une fois postée.
 
bye bye
Reng.
 
edit : j'ai eu une coupure du net hier, j'ai pas pu vous préciser ce que je désirais, ça m'a permis de mettre le nez dans les reg exp  :pt1cable:


Message édité par rengzehn le 24-08-2005 à 10:07:05
Reply

Marsh Posté le 24-08-2005 à 13:20:15    

Tiens y a des bugs faut que tu affiches en utilisant htmlentities()
 
C'est moi les posts Test et Bug
 
http://peyo.lost-oasis.net/tribune/tribune.php


Message édité par Masenko le 24-08-2005 à 13:20:39
Reply

Marsh Posté le 24-08-2005 à 15:05:45    

vi je sais bug connu sur les forums mal codés ;) mais mes potes sont loin d'être des codeurs et ils s'amuseront pas à mettre des balises div fermantes dans la case pseudo ou dans le corps du post...
là j'ai une tribune opérationnelle toute légère avec 60 lignes de code, ça suffira largement :]


Message édité par rengzehn le 24-08-2005 à 15:09:00
Reply

Marsh Posté le 24-08-2005 à 16:00:15    

Mais tlm a accès à ton truc aussi ou par la suite ce sera securisé ?
Sinon autant utilisé htmlentities() ça fera pas plus ramer.
 
Enfin c'est toi qui voit c'est ton code :)

Reply

Marsh Posté le 24-08-2005 à 16:46:54    

On peut injecter du JS facilement là, je viens d'essayer avec un alert.
 
Ca coûte rien, un coup d'htmlentities.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 24-08-2005 à 17:43:00    

Masenko a écrit :

Mais tlm a accès à ton truc aussi ou par la suite ce sera securisé ?
Sinon autant utilisé htmlentities() ça fera pas plus ramer.
 
Enfin c'est toi qui voit c'est ton code :)


 
oui oui ce sera derriere un accès avec mpd. je l'ai mis temporairement sur mon site perso pour vous montrer ce que je voulais faire.
merci du tuyau pour htmlentities() mais je ne comprends pas à quoi ça sert, j'ai lu ça : http://www.nexen.net/docs/php/anno [...] tities.php et ça m'a pas aidé :(
en deux mots, ça sert à quoi ?


Message édité par rengzehn le 24-08-2005 à 17:43:26
Reply

Marsh Posté le 24-08-2005 à 18:00:53    

htmlentities
 
(PHP 3, PHP 4, PHP 5)
htmlentities --  Convertit tous les caractères éligibles en entités HTML  
 
Source -> http://fr.php.net/manual/fr/function.htmlentities.php
 
Ce qui fait que si tu écris par exemple <br /> ou <html> ou etc etc... ça va être convertit et donc tu verras écris <br /> à l'écran.
 
Regarde le code source de la page tu verras tout ce qui est en dessous est convertit.
 
Look ça :
<br />
 
<a href="http://www.google.fr">Google</a>
 
<table>
 <tr>
  <td>Pwet</td>
 </tr>
</table>
 
<div class="test">Yop yop</div>

Reply

Marsh Posté le 24-08-2005 à 18:02:10    

Mon message au dessus a été convertit en ça :
 

Code :
  1. <strong>htmlentities</strong>
  2. <br />&nbsp;<br />(PHP 3, PHP 4, PHP 5)
  3. <br />htmlentities -- &nbsp;Convertit tous les caractères éligibles en entités HTML &nbsp;<br />&nbsp;<br />Source -&gt; <a href="http://fr.php.net/manual/fr/function.htmlentities.php" target="_blank" class="cLink">http://fr.php.net/manual/fr/function.htmlentities.php</a>
  4. <br />&nbsp;<br />Ce qui fait que si tu écris par exemple &lt;br /&gt; ou &lt;html&gt; ou etc etc... ça va être convertit et donc tu verras écris &lt;br /&gt; à l'écran.
  5. <br />&nbsp;<br />Regarde le code source de la page tu verras tout ce qui est en dessous est convertit.
  6. <br />&nbsp;<br />Look ça :
  7. <br />&lt;br /&gt;
  8. <br />&nbsp;<br />&lt;a href="http://www.google.fr"&gt;Google&lt;/a&gt;
  9. <br />&nbsp;<br />&lt;table&gt;
  10. <br />&nbsp;&lt;tr&gt;
  11. <br />&nbsp; &lt;td&gt;Pwet&lt;/td&gt;
  12. <br />&nbsp;&lt;/tr&gt;
  13. <br />&lt;/table&gt;
  14. <br />&nbsp;<br />&lt;div class="test"&gt;Yop yop&lt;/div&gt;


Message édité par Masenko le 25-08-2005 à 13:28:51
Reply

Marsh Posté le 24-08-2005 à 18:22:44    

rengzehn a écrit :

oui oui ce sera derriere un accès avec mpd. je l'ai mis temporairement sur mon site perso pour vous montrer ce que je voulais faire.
merci du tuyau pour htmlentities() mais je ne comprends pas à quoi ça sert, j'ai lu ça : http://www.nexen.net/docs/php/anno [...] tities.php et ça m'a pas aidé :(
en deux mots, ça sert à quoi ?


Ca sert à transformer les caractères HTML tendancieux en entités, afin qu'ils soient affichés correctement mais pas interprétés en tant que code HTML.
 
Par exemple, prenons un forum que tu crées.
Les utilisateurs peuvent rentrer des posts qui sont ensuite affichés.
 
Si un utilisateur saisit

<script type="text/javascript">alert("i pwnz teh worldz" )</script>


Si tu balances ça direct dans tes pages, ça veut dire que les utilisateurs peuvent intégrer ce qu'ils veulent, et ça te met complètement à la merci des petits malins (cross site scripting, ...)
 
Donc tu passes un coup de htmlentities et ça devient

&lt;script type=&quot;text/javascript&quot;&gt;alert(&quot;i pwnz teh worldz&quot;)&lt;/script&gt;


L'intégrer direct à la page ne le fera pas interpréter direct par les navigateurs, ne fera qu'afficher ce qui a été saisi.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 25-08-2005 à 11:03:01    

ok vu, merci

Reply

Marsh Posté le 26-08-2005 à 13:37:46    

J'ai rajouté la modif avec htmlentities, allez-y viendez maintenant avec votre JS :))
http://peyo.lost-oasis.net/tribune/tribune.php  
 

Reply

Marsh Posté le 26-08-2005 à 13:55:57    

Ok maintenant le problème c'est que tu as mis un addslashes() lors de l'insertion SQL alors que les magic_quote_gpc sont à 1.
 
a 1 : ajoute des slash genre ' et " devient \' et \"
a 0 : ne fait rien ' et " = ' et "
 
Tu dois soit créer une fonction qui vérifie si les magic_quote_gpc sont à 1 avec get_magic_quote_gpc.
 
Exemple.
 

Code :
  1. function my_addslashes($var)
  2. {
  3. if ( get_magic_quotes_gpc() == 0 ) {
  4.   return addslashes($var);}
  5. elseif ( get_magic_quotes_gpc() == 1 ) {
  6.   return $var;}
  7. }


 
Cette fonction va faire un addslashes si les magic_quote_gpc sont à off.
Si c'est activé elle ne va pas le faire car c'est fait par défault.
 
Si t'as pas compris va sur ta tribune et écrit ça "L'oiseau" tu verras ce sera transformé en "L\'oiseau".
 
Bonne chance.
 
(Pour info moi je désactive les magic_quote_gpc quand l'hébergeur le permet sinon pas le choix tu dois faire des fonctions qui vérifie)


Message édité par Masenko le 26-08-2005 à 14:12:12
Reply

Marsh Posté le 26-08-2005 à 14:20:11    

Pfiou :) réglé avec stripslashes()
 
D'autres remarques ?
 
ps : je bosse pas avec une bdd mais un simple fichier texte.

Reply

Marsh Posté le 26-08-2005 à 14:27:07    

Bah ça a l'air bon la :)

Reply

Marsh Posté le 26-08-2005 à 14:34:22    

Hum nan en faite t'as fais pas mal d'erreur regarde ici :
 
http://validator.w3.org/check?uri= [...] ribune.php

Reply

Marsh Posté le 30-08-2005 à 23:03:25    

Bonjour,  
 
J'emprunte temporairement le sujet  :) pour une petite question rapide :  
 
Si on applique les htmlentities, y a-t-il un moyen de n'autoriser que quelques balises ? Je vuodrais en effet prendre en compte la balise <br /> et uniquement celle-ci. Merci pour les éclaircissements  :sol:  
 
Jarodd

Reply

Marsh Posté le 30-08-2005 à 23:22:03    

Oui et non
htmlentities($_POST['pwet'];
va tout remplacer.
 
Mais si tu fais
nl2br(htmlentities($_POST['pwet']));
Ca va ajouter les <br /> si tu fais des sauts de lignes dans ton message, mais si t'écris <br /> manuelement il sera encodé.


Message édité par Tetsumaki le 30-08-2005 à 23:22:43
Reply

Marsh Posté le 31-08-2005 à 00:37:32    

superjarodd a écrit :

Bonjour,  
 
J'emprunte temporairement le sujet  :) pour une petite question rapide :  
 
Si on applique les htmlentities, y a-t-il un moyen de n'autoriser que quelques balises ? Je vuodrais en effet prendre en compte la balise <br /> et uniquement celle-ci. Merci pour les éclaircissements  :sol:  
 
Jarodd


strip_tags, ça devrait être ce que tu veux


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 31-08-2005 à 09:42:49    

Merci !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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