Comment échapper à un seul devis?
Je suis en train d'écrire un peu de code JavaScript qui utilise une chaîne de rendu avec PHP. Comment puis-je échapper les apostrophes (et seulement les guillemets simples) dans mon string PHP?
<script type="text/javascript">
$('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>
- Vous aurez besoin de s'échapper plus que de simples citations. Les retours à la ligne, pour une. Vous pourriez bien faire avec quelque chose comme
addcslashes($mystringWithSingleQuotes, "'\"\r\n\\\t\0..\37")
- Au lieu de manipuler la fuite face à vous-même, utilisez
json_encode()
pour obtenir un Javascript valide chaîne (et supprimer votre extérieur des guillemets simples). - Vous pouvez poster votre réponse comme une réponse au lieu d'un commentaire? Des réponses appropriées dans les commentaires ne peuvent pas être sélectionnées et, par conséquent, crée de faux "questions sans réponse".
- Pourquoi ne pouvez-vous pas juste les guillemets doubles
.html()
au lieu de l'emballage dans des guillemets simples? le php expansion va se passer, peu importe. Fait cela pour tout, à partir d'attributs sur les éléments et les importations ainsi que les affectations de variables à l'intérieur des blocs de script.
Vous devez vous connecter pour publier un commentaire.
Tout simplement:
echo str_replace('\'', '\\\'', $myString);
Cependant, je vous conseille d'utiliser de JSON et
json_encode()
de la fonction telle qu'elle sera plus fiable (les citations les nouvelles lignes par exemple):str_replace("'","\\'", $string)
et similaires sont incorrectes. Considérez la chaîne \' Il sera remplacé par \\' et ce sera la cause d'une vulnérabilité d'injection. Au lieu d'utiliser json_encode comme Crozin suggère.JSON.parse('<?php echo json_encode($data);?>');
et il n'était pas parce qu'il n'y a qu'un seul guillemet à l'intérieur des données. Plus tard, j'ai su il n'est pas nécessaire d'utiliserJSON.parse
ici.Si vous souhaitez vous échapper de caractères avec un
\
, vous avezaddcslashes()
. Par exemple, si vous voulez échapper à seulement guillemets simples comme la question, vous pouvez le faire:Et si vous souhaitez vous échapper de
'
,"
,\
, etnul
(l'octet null), vous pouvez utiliseraddslashes()
:Dans certains cas, je viens de le convertir en ENTITÉS:
Sur la page HTML, le visuel, le résultat est le même:
Cependant, il est assaini dans la source.
De remplacer uniquement les guillemets simples, l'utilisation de cette simple déclaration:
Vous pouvez utiliser le addcslashes fonction pour obtenir ce fait comme suit:
Utiliser la fonction native
htmlspecialchars
. Il va s'échapper de tous les caractères spéciaux. Si vous voulez échapper à partir d'un devis spécifiquement, l'utilisationENT_COMPAT
ouENT_QUOTES
. Voici l'exemple:La sortie serait comme ceci:
Lire la suite dans PHP htmlspecialchars() la Fonction
Après un long temps à lutter contre ce problème, je pense avoir trouvé la meilleure solution.
Combiner deux fonctions possible d'échapper à une chaîne à utiliser comme HTML.
Pour échapper double devis si vous utilisez la chaîne à l'intérieur d'un appel de fonction JavaScript, et d'autres pour échapper à l'apostrophe pour éviter ces simples citations qui vont autour de l'argument.
Solution:
Résoudre:
Voici comment je l'ai fait. Stupide, mais simple.
Je travaillais sur la sortie HTML qui a appelé code JavaScript pour afficher une image...
Je ne suis pas sûr exactement ce que vous faites avec vos données, mais vous pouvez toujours essayer:
Je l'utiliser chaque fois que les chaînes sont envoyées à une base de données pour le stockage.
%27 est le type d'encodage du caractère, et il aide également à prévenir la perturbation de la demande si un seul
'
personnage est contenue dans une chaîne de caractères envoyée à votre serveur. Je voudrais remplacer " avec %27 en JavaScript et PHP, juste au cas où quelqu'un essaie de l'envoyer manuellement des données à votre fonction PHP.Pour le rendre encore meilleur pour votre utilisateur final, il suffit d'exécuter une inversion de la fonction de remplacement pour toutes les données que vous obtenez à partir de votre serveur et de le remplacer tous les %27 sous-chaînes avec
'
.Heureux d'injection éviter!
J'ai écrit la fonction suivante. Il remplace les suivants:
Apostrophe ['] avec une barre oblique et d'un seul devis [\'].
Barre oblique inverse [\] avec deux barres obliques inverses [\\]
Vous pouvez la modifier pour ajouter ou supprimer des caractères de remplacement en $remplacement de tableau. Par exemple, pour remplacer \r\n, il devient "\r\n" => "\r\n" et "\n" => "\n".
La fonction propre sur strtr est qu'il préfère long de remplacements.
Exemple, "Cool\r\nFeature" s'échappe \r\n plutôt que de s'échapper \n le long.