|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Étudiant Inscription : mai 2011 Messages : 20 ![]() |
Bonjour à tous,
j'ai un soucis avec la fonction preg_replace de PHP. J'essaye de remplacer les balises: """, "<", ">" qui apparaissent après avoir fait un nl2br(htmlspecialchars()) sur la chaine $source. Et quand je fais ceci: Code :
$source = preg_replace ('#&quot;#', '"', $source); Code :
$source = preg_replace ('#&lt;#', '<', $source); Pourtant si on remplace cette dernière ligne par: Code :
$source = preg_replace ('#&lt;#', 'A', $source); Mais même en les échappant cela ne fonctionne pas. Avez-vous un idée du problème ? Merci. Cordialement, Pop360 |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 244 ![]() |
En quelques mots tu pourrais nous dire dans quel contexte et dans quel but tu souhaites faire cela ? J'ai comme l'intuition que tu pourrais faire autrement...
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Étudiant Inscription : mai 2011 Messages : 20 ![]() |
Merci d'avoir répondu aussi vite, en fait mon but est d'afficher des champs contenus dans une base de données mysql tout en désactivant les scripts qui aurait pu êtres entrés. Le htmlspecialchars est censé parrer à une éventuelle faille XSS.
Le principal problème c'est que comme ces champs sont censer contenir du code de n'importe quel langage, il n'est pas possible de tout simplement supprimer les balises < > ou même les quotes... Mais il se trouve que je viens de tester en supprimant tout simplement htmlspecialchars ainsi que les preg_replace(), et tout fonctionne correctement. Par exemple si j'entre : Code :
<script type="text/javascript">alert('test de script')</script> Ce qui d'ailleurs me parait étrange puisque le texte est enregistré tel quel dans la base de données, puis affiché directement |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Étudiant Inscription : mai 2011 Messages : 20 ![]() |
Ah non, en fait je n'avais pas vu que le texte était traité deux fois :
à l'envoi j'avais déjà mis: du coup en le retirant de l'affichage tout marche Du coup je pense que le problème est résolu. |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 244 ![]() |
En résumé :
- lors de l'enregistrement en bdd, les variables doivent être rentrées sans traitement particulier mais protégées par mysql_real_escape_string (ou équivalent si tu utilises pdo). - à l'affichage (et uniquement pour l'affichage) tu utilises htmlspecialchars et si besoin nl2br pour respecter les retours lignes. Ne PAS utiliser htmlspecialchars lors de l'enregistrement en bdd car cela peut poser de sérieux problèmes si tu veux faire des recherches dans tes champs de bdd et rend ta base impropre à l'exportation sans traitement php préalable.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Étudiant Inscription : mai 2011 Messages : 20 ![]() |
Ah ok, merci pour ces précisions, c'est vrai que d'habitude j'effectue le traitement à l'affichage seulement pour garder l'original, mais je n'avais encore jamais pensé à la recherche dans les champs de la base de données (encore une nouvelle fonctionnalité que je n'ai plus qu'à ajouter
).Donc maintenant je n'ai plus de traitement avant l'enregistrement, et un htmlsepcialchars ainsi qu'un nl2br pour l'affichage. Tout marche à peu près, par contre à l'affichage les tabulations qui étaient entrées dans le formulaire disparraissent, ce qui est normal puisque celle ci n'ont pas de balises. Du coup j'ai l'impression qu'il va falloir faire un preg_replace avant l'enregistrement pour rajouter des balises... À moins qu'il y ait un équivalent de nl2br pour les tabulations ? |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 244 ![]() |
Comment faisais-tu auparavant pour qu'elles soient affichées ? et tu les enregistrais comment ?
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Étudiant Inscription : mai 2011 Messages : 20 ![]() |
En fait je crois que les tabulations n'ont jamais été affichées.
Pour l'enregistrement j'ai : Code :
$source = substr($_POST['source'], 0,5000); Code :
$source = nl2br(htmlspecialchars($donnees['Source'])); |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com