2010-10-13 10 views
1

J'essaie d'expliquer mon problème avec un anglais non parfait :)PHP - gros problème s'échapper « »

Quand je tente d'envoyer une chaîne de caractères (côté client) au serveur, je vois que le formulaire HTML ajouter le caractère "\" comme échappement avant certains caractères (par exemple avec ", 'et \ lui-même)

Mais c'est un problème: si l'enregistrer sur mysql, avant de filtrer la chaîne en utilisant mysql_real_escape_string(), et il considère le caractère d'échappement ajouté par html comme un "caractère ajouté par l'utilisateur", mais ce n'est pas vrai

La même chose quand, après avoir vérifié la valeur sur le côté serveur et l'ignorer pour une raison quelconque, je placez-les sur les champs. J'ai besoin d'échapper à nouveau les chars (je le fais avec addslashes() fonction php), parce que si j'ai $ var égale à bonjour "monde" comment allez-vous, sur le champ de saisie (comme je l'ai écrit ci-dessus) échoue.

Alors, comment puis-je résoudre ce problème? Je pense qu'il ya une solution :)

Partie 2

Maintenant, avec magic_quotes j'ai résolu ce problème. Maintenant, si le paramètre échoue quand je le vérifie, je vais l'enregistrer sur un var et le mettre dans le bon champ. Le problème est que.

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#input1").val("<?= addslashes($name) ?>"); 
    }); 
</script>  

<input class="inputReg" maxlength="20" name="name" id="input1" /> 

ce code fonctionne !!! Je mets la valeur (troquée JQuery). Si j'écris ceci:

<input class="inputReg" maxlength="20" name="name" value="<?=addslashes($name)?>" id="input1" /> 

cela ne fonctionne pas. En fait, si j'écris (par exemple) la chaîne "bonjour" mon 'nom est marco "il ajoute à chaque fois 1-2-4-8 le caractère avant. Pourquoi ça? Ça ne marche pas. Une idée? Cheers

+0

omble \ est nommé ** slash **. maintenant vous pouvez essayer de deviner ce que ** addslashes ** signifie –

+0

je sais ce que addslashes() fait. Par exemple (avec string hello "marco") le champ de saisie devrait ressembler (directement, ou truqué JQuery) comme . Mais quand je l'envoie, il devrait supprimer la barre oblique. En fait, en utilisant Jquery, il le fait. – markzzz

+0

le champ de saisie doit ** pas ** ressemble à '

Répondre

5

Ressemble à magic quotes. Assurez-vous que cela est désactivé dans votre fichier php.ini:

magic_quotes_gpc = Off 
+3

Aussi, si pour une raison quelconque vous ne pouvez pas tourner off magic_quotes en raison de votre configuration d'hébergement, exécutez toutes vos entrées utilisateur à travers la fonction strip_slashes –

+0

j'espère qu'il va éteindre ... sinon je dois changer quelque chose comme 50-60 fichiers php ... :) – markzzz

+0

@ markzzz don ' –

0
mysql_real_escape_string(stripslashes($string)) 

sera (temporairement) résoudre votre problème. Désactiver magic_quotes serait la meilleure option.

+0

toutes les solutions temporaires ont tendance à être éternelles. –

+0

quoi? : p essayait juste d'aider. –

0

Vous pouvez utiliser cet extrait de code si vous ne est pas autorisé à modifier php.ini:

# Disable magic quotes if enabled in the server settings 
if (get_magic_quotes_gpc()) { 
    function stripslashes_deep($value) { 
     $value = is_array($value) ? 
     array_map('stripslashes_deep', $value) : 
     stripslashes($value); 

     return $value; 
    } 

    $_POST = array_map('stripslashes_deep', $_POST); 
    $_GET = array_map('stripslashes_deep', $_GET); 
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE); 
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST); 
} 
+0

merci, mais je peux éditer le fichier php.ini sur mon hébergement :) – markzzz

+1

Non seulement pour vous markzz mais pour ceux qui Google cette question aussi bien. – Marwelln