82 votes

Comment puis-je échapper aux guillemets simples ?

J'écris du code JavaScript qui utilise une chaîne rendue avec PHP. Comment puis-je échapper aux guillemets simples (et uniquement aux guillemets simples) dans ma chaîne PHP ?

 <script type="text/javascript">
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>');
</script>

69voto

Crozin Points 22346

Tout simplement : echo str_replace('\'', '\\\'', $myString); Cependant, je suggérerais d'utiliser JSON et la fonction json_encode() car ce sera plus fiable (cite les nouvelles lignes par exemple):

 <?php $data = array('myString' => '...'); ?>

<script>
   var phpData = <?php echo json_encode($data) ?>;
   alert(phpData.myString);
</script>

41voto

PhoneixS Points 875

Si vous voulez échapper des caractères avec un \ , vous avez addcslashes() . Par exemple, si vous souhaitez échapper uniquement aux guillemets simples comme la question, vous pouvez faire :

 echo addcslashes($value, "'");

Et si vous voulez échapper à ' , " , \ , et nul (l'octet nul), vous pouvez utiliser addslashes() :

 echo addslashes($value);

20voto

Julian Points 2595
str_replace("'", "\'", $mystringWithSingleQuotes);

18voto

snm-yah Points 2067

Dans certains cas, je le convertis simplement en ENTITÉS :

                         // i.e.,  $x= ABC\DEFGH'IJKL
$x = str_ireplace("'",  "&apos;", $x);
$x = str_ireplace("\\", "&bsol;", $x);
$x = str_ireplace('"',  "&quot;", $x);

Sur la page HTML, la sortie visuelle est la même :

 ABC\DEFGH'IJKL

Cependant, il est aseptisé à la source.

16voto

David M. Points 2714

Toutes les réponses qui disent str_replace("'","\\'", $string) et similaires sont incorrectes. Considérez la chaîne

 \'

Il sera remplacé par

 \\'

et cela entraînera une vulnérabilité d'injection. Utilisez plutôt json_encode comme le suggère Crozin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X