Apparition d'antislashs d'échappement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Apparition d'antislashs d'échappement

Re: Apparition d'antislashs d'échappement

par Victor BRITO » 12 févr. 2009, 20:14

Les magic_quotes sont actives, j'ai essayé de les désactivée. Le .htaccess retourne une erreur serveur (500) et la fonction PHP ne donne rien.
Qu'as-tu inséré dans ton .htaccess pour que l'erreur 500 soit générée ?

De plus, sache que tous les hébergeurs n'offrent pas la possibilité de modifier la configuration de PHP, que ce soit au moyen d'un .htaccess ou d'un fichier php.ini personnalisé. Consulte ton hébergeur pour savoir si tu peux, effectivement, désactiver la directive magic_quotes_gpc.

par Montspy » 12 févr. 2009, 15:07

Merci stopher pour cette réponse rapide !
J'ai ajouté la fonction stripslashes au début de mon code mais cela ne change rien :
<?php 
header("Content-Type: text/plain");

if(isset($_POST['texte']) && $_POST['texte'] != "")
{
	$texte = $_POST['texte'];
	
	$texte = stripslashes($texte);	
	$texte = nl2br($texte);
	
	/*
		le reste des regex
	*/

	echo $texte;
} 
?>
Alors j'ai mis après la fonction nl2br et ça fonctionne ! :
<?php 
header("Content-Type: text/plain");

if(isset($_POST['texte']) && $_POST['texte'] != "")
{
	$texte = $_POST['texte'];
	
	$texte = nl2br($texte);
	$texte = stripslashes($texte);	
	
	/*
		le reste des regex
	*/

	echo $texte;
} 
?>
Merci beaucoup stopher !

Montspy.

par stopher » 12 févr. 2009, 14:34

Salut ,

Tu ne peux/veux pas utiliser la fonction stripslashes() ?

Exemple :
$chaine	=	'[img=\"toto.jpeg\"]toto[/img]';

echo "Chaine analyse : $chaine<br><br>";

echo 'sans stripslaches()  : ';

var_dump(preg_match('/\[img="(.+)"\](.+)\[\/img\]/',$chaine));

echo '<br><br>avec stripslashes() : ';

var_dump(preg_match('/\[img="(.+)"\](.+)\[\/img\]/',stripslashes($chaine)));
Ce qui donne :

Code : Tout sélectionner

Chaine analyse : [img=\"toto.jpeg\"]toto[/img] sans stripslaches() : int(0) avec stripslashes() : int(1)

Apparition d'antislashs d'échappement

par Montspy » 12 févr. 2009, 14:09

Bonjour !
Alors je vous explique :
J'ai un textarea avec du texte dedans (logique non :D ) contenant du BBCode (, [em], [url=""], etc. ...). D'autre part j'ai un bouton qui appelle une fonction javascript utilisant AJAX pour transformer ce texte en texte "enrichi" HTML (<strong>, <em>, <a href="">, etc. ...). Problème : en local cela fonctionne très bien mais sur les serveurs de Free, il me rajoute des "\" devant les guillemets et donc fausse les Regex...
Les magic_quotes sont actives, j'ai essayé de les désactivée. Le .htaccess retourne une erreur serveur (500) et la fonction PHP ne donne rien.

Voici du code :
Le fichier appelé par AJAX :
<?php 
header("Content-Type: text/plain");

if(isset($_POST['texte']) && $_POST['texte'] != "")
{
	$texte = $_POST['texte'];
	
	$texte = nl2br($texte);
	
	$texte = preg_replace('#\[em\]#', '<em>', $texte);
	$texte = preg_replace('#\[/em\]#', '</em>', $texte);
	$texte = preg_replace('#\[b\]#', '<strong>', $texte);
	$texte = preg_replace('#\[/b\]#', '</strong>', $texte);
	$texte = preg_replace('#\[titre1\]#', '<h2 style="padding: 0px; margin: 5px; margin-left: 15px;">', $texte);
	$texte = preg_replace('#\[/titre1\]#', '</h2>', $texte);
	$texte = preg_replace('#\[titre2\]#', '<h3 style="padding: 0px; margin: 5px; margin-left: 30x;">', $texte);
	$texte = preg_replace('#\[/titre2\]#', '</h3>', $texte);
	$texte = preg_replace('#\[url="(.+)"\](.+)\[/url\]#i', '<a href="$1">$2</a>', $texte);
	$texte = preg_replace('#\[img="(.+)"\](.+)\[/img\]#i', '<img src="$1" alt="$2" title="$2" />', $texte);
	
	echo $texte;
} 
?>
Et la fonction javascript :
function apercuNews()
{
	var xhr = getXHR();

	if(xhr && xhr.readyState != 0)
		xhr.abort(); 

	xhr.onreadystatechange = function()
	{
		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
		{
			document.getElementById('divApercuNews').innerHTML = xhr.responseText;
			document.getElementById('admin-content').style.height = parseInt(document.getElementById('adminNews').offsetHeight + 46) + 'px';
		}
	}

	var texteBb = document.getElementById('messageNews').value;
	xhr.open('POST', '/inc/php/bbToHTML.php', true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send('texte='+texteBb);
}
Merci d'avance.
Montspy.