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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1182184
rengzehn
Posté le 23-08-2005 à 12:19:05  profilanswer
 

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
mood
Publicité
Posté le 23-08-2005 à 12:19:05  profilanswer
 

n°1182185
seb306bzh
Posté le 23-08-2005 à 12:21:57  profilanswer
 

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 !!
n°1182190
sielfried
Posté le 23-08-2005 à 12:27:42  profilanswer
 

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
n°1182205
xtof_83
Freeride Spirit
Posté le 23-08-2005 à 12:41:13  profilanswer
 

pas besoin de regexp...enfin...

n°1182208
masklinn
í dag viðrar vel til loftárása
Posté le 23-08-2005 à 12:44:10  profilanswer
 

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
n°1182210
xtof_83
Freeride Spirit
Posté le 23-08-2005 à 12:45:42  profilanswer
 

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

n°1182247
sielfried
Posté le 23-08-2005 à 13:27:49  profilanswer
 

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
n°1182281
xtof_83
Freeride Spirit
Posté le 23-08-2005 à 13:59:37  profilanswer
 

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...

n°1182297
sielfried
Posté le 23-08-2005 à 14:09:14  profilanswer
 

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
n°1182302
xtof_83
Freeride Spirit
Posté le 23-08-2005 à 14:11:17  profilanswer
 

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:

mood
Publicité
Posté le 23-08-2005 à 14:11:17  profilanswer
 

n°1182306
Masenko
Posté le 23-08-2005 à 14:14:12  profilanswer
 

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. }

n°1183035
rengzehn
Posté le 24-08-2005 à 09:52:58  profilanswer
 

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
n°1183316
Masenko
Posté le 24-08-2005 à 13:20:15  profilanswer
 

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
n°1183446
rengzehn
Posté le 24-08-2005 à 15:05:45  profilanswer
 

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
n°1183502
Masenko
Posté le 24-08-2005 à 16:00:15  profilanswer
 

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 :)

n°1183529
sielfried
Posté le 24-08-2005 à 16:46:54  profilanswer
 

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
n°1183551
rengzehn
Posté le 24-08-2005 à 17:43:00  profilanswer
 

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
n°1183565
Masenko
Posté le 24-08-2005 à 18:00:53  profilanswer
 

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>

n°1183570
Masenko
Posté le 24-08-2005 à 18:02:10  profilanswer
 

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
n°1183595
masklinn
í dag viðrar vel til loftárása
Posté le 24-08-2005 à 18:22:44  profilanswer
 

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
n°1184001
rengzehn
Posté le 25-08-2005 à 11:03:01  profilanswer
 

ok vu, merci

n°1185217
rengzehn
Posté le 26-08-2005 à 13:37:46  profilanswer
 

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

n°1185236
Masenko
Posté le 26-08-2005 à 13:55:57  profilanswer
 

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
n°1185284
rengzehn
Posté le 26-08-2005 à 14:20:11  profilanswer
 

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

n°1185296
Masenko
Posté le 26-08-2005 à 14:27:07  profilanswer
 

Bah ça a l'air bon la :)

n°1185305
Masenko
Posté le 26-08-2005 à 14:34:22  profilanswer
 

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

n°1188291
superjarod​d
Posté le 30-08-2005 à 23:03:25  profilanswer
 

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

n°1188299
Tetsumaki
Posté le 30-08-2005 à 23:22:03  profilanswer
 

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
n°1188350
zapan666
Tout est relatif
Posté le 31-08-2005 à 00:37:32  profilanswer
 

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 !
n°1188402
superjarod​d
Posté le 31-08-2005 à 09:42:49  profilanswer
 

Merci !

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
HTML, JAVA, PHP.. pour mon site ?Quel langauge pour mon site, HTML, JAVA, PHP.. ?
Newsletter PHP [Résolu][REcrute] programmeur Php / html et autres pour site de journalisme !
[HTML / CSS] Un cadre contenant deux blocsProblème de frames [résolu]
[Résolu] Coppermine Photo Gallerie... HELP !!!![PHP] variable dans URL sans methode GET
probleme de flux rss . Les site en html peuvent pas l'afficheractvé un exe a partir d'une page html en local [reglé]
Plus de sujets relatifs à : remplacer une URL dans une string par une balise html [Résolu]


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