J'écris du code JavaScript qui utilise une chaîne rendue avec PHP. Comment puis-je échapper des guillemets simples (et seulement des guillemets simples) dans ma chaîne PHP?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
Tout simplement: echo str_replace('\'', '\\\'', $myString);
Cependant, je suggérerais d'utiliser JSON et json_encode()
function car ce sera plus fiable (cite de nouvelles lignes par exemple):
<?php $data = array('myString' => '...'); ?>
<script>
var phpData = <?php echo json_encode($data) ?>;
alert(phpData.myString);
</script>
str_replace("'", "\'", $mystringWithSingleQuotes);
Si vous voulez échapper des caractères avec un \
vous avez addcslashes()
par exemple si vous voulez échapper seulement des guillemets simples comme la question que vous pouvez faire:
echo addcslashes($value, "'");
Et si vous voulez échapper à '
, "
, \
et nul
(l'octet null), vous pouvez utiliser addslashes()
:
echo addslashes($value);
Pour remplacer uniquement les guillemets simples, utilisez cette instruction simple:
$string = str_replace("'","\\'", $string);
Dans certains cas, je le convertis simplement en ENTITÉS:
//i.e. $x= ABC\DEFGH'IJKL
$x= str_ireplace("'", "'", $x);
$x= str_ireplace("\\", "\", $x);
$x= str_ireplace('"', """, $x);
sur une page HTML, la sortie visuelle est la même:
ABC\DEFGH'IJKL
cependant, il est désinfecté à la source.
Je sais que je suis en retard à la fête. Mais vous pouvez utiliser addcslashes function pour y arriver,
echo addcslashes($text, "'\\");
Utilisez la fonction native htmlspecialchars
, elle échappera à tous les caractères spéciaux. si vous voulez spécifiquement échapper à quate, utilisez ENT_COMPAT
ou ENT_QUOTES
. Voici l'exemple.
$str = "Jane & 'Tarzan'";
echo htmlspecialchars($str, ENT_COMPAT); // Will only convert double quotes
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // Converts double and single quotes
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Does not convert any quotes
La sortie serait comme ça
Jane & 'Tarzan'<br>
Jane & 'Tarzan'<br>
Jane & 'Tarzan'
Lisez plus ici, https://www.w3schools.com/php/func_string_htmlspecialchars.asp
Après avoir longtemps lutté contre ce problème, je pense avoir trouvé la meilleure solution.
La combinaison de deux fonctions rend possible l'échappement d'une chaîne à utiliser au format HTML.
Un pour échapper à la citation double si vous utilisez la chaîne dans un appel de fonction javascript, et Une autre pour échapper à la citation simple afin d'éviter les citation simples qui entourent l'argument.
Solution:
mysql_real_escape_string(htmlspecialchars($string))
Résoudre:
écho 'onclick = "javascript_function (\' '. mysql_real_escape_string (htmlspecialchars ($ string))" "
J'ai écrit la fonction suivante. Il remplace ce qui suit:
Devis unique ['] avec barre oblique et guillemet simple [\']
Barre oblique inverse [\] avec deux barres obliques inverses [\\]
function escapePhpString($target) {
$replacements = array(
"'" => '\\\'',
"\\" => '\\\\'
);
return strtr($target, $replacements);
}
Vous pouvez le modifier pour ajouter ou supprimer des remplacements de caractères dans le tableau $ remplacements. Par exemple, pour remplacer\r\n, il devient "\ r\n" => "\ r\n" et "\ n" => "\ n".
/**
* With new line replacements too
*/
function escapePhpString($target) {
$replacements = array(
"'" => '\\\'',
"\\" => '\\\\',
"\r\n" => "\\r\\n",
"\n" => "\\n"
);
return strtr($target, $replacements);
}
La fonctionnalité intéressante à propos de strtr est qu’il préférera les longs remplacements. Exemple, "Cool\r\nFeature" échappera à\r\n au lieu de s'échapper\n.
Voici comment je l'ai fait. Stupide, mais simple.
$singlequote = "'";
$picturefile = getProductPicture($id);
echo showPicture('.$singlequote.$picturefile.$singlequote.');
Je travaillais sur la sortie HTML appelant du code JavaScript pour montrer une image ...
Vous ne savez pas exactement ce que vous faites avec vos données, mais vous pouvez toujours essayer:
$ string = str_replace ("'", "% 27", $ string);
J'utilise ceci chaque fois que des chaînes sont envoyées à une base de données pour y être stockées. Le% 27 est l'encodage du caractère ', ce qui permet également d'éviter toute interruption des demandes GET si un seul caractère est contenu dans une chaîne envoyée à votre serveur. . Je remplacerais 'par% 27 dans javascript et PHP au cas où quelqu'un essaierait d'envoyer manuellement des données à votre fonction PHP. Pour le rendre plus joli pour votre utilisateur final, exécutez simplement une fonction de remplacement inverse pour toutes les données que vous récupérez sur votre serveur et remplacez toutes les sous-chaînes% 27 par '.
Bonne injection à éviter!