375 votes

Passer une chaîne PHP à une variable JavaScript (et d'échapper à des retours à la ligne)

Quelle est la façon la plus simple de coder une chaîne PHP pour la sortie d'une variable JavaScript?

J'ai une chaîne PHP qui inclut des citations et des retours à la ligne. J'ai besoin du contenu de cette chaîne pour être mis dans une variable JavaScript.

Normalement, je viens de construire mon code JavaScript dans un fichier PHP, à la:

<script>
  var myvar = "<?php echo $myVarValue;?>";
</script>

Toutefois, cela ne fonctionne pas lors de l' $myVarValue contient des apostrophes ou des retours à la ligne.

513voto

bobwienholt Points 9107

L'expansion sur quelqu'un d'autre de répondre:

<script>
  var myvar = <?php echo json_encode($myVarValue); ?>;
</script>

À l'aide de json_encode() nécessite:

  • PHP 5.2.0 ou plus
  • $myVarValue codé en UTF-8 (ou US-ASCII, bien sûr)

Depuis UTF-8 prend en charge Unicode complet, il doit être sûr pour convertir à la volée.

27voto

Javier Points 33134

coder avec JSON

22voto

micahwittman Points 6943
function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}

21voto

pr1001 Points 8334

J'ai eu un problème similaire, et de comprendre que ce qui suit est la meilleure solution:

<script>
    var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>

Cependant, le lien que micahwittman posté suggère qu'il y a de légères différences de codage. PHP rawurlencode() fonction est censé respecter la RFC 1738, alors qu'il semble y avoir eu aucun effort dans ce sens avec du Javascript decodeURIComponent().

11voto

giraff Points 1758

Le paranoïaque version: Échapper à chaque caractère unique.

function javascript_escape($str) {
  $new_str = '';

  $str_len = strlen($str);
  for($i = 0; $i < $str_len; $i++) {
    $new_str .= '\\x' . dechex(ord(substr($str, $i, 1)));
  }

  return $new_str;
}

EDIT: pourquoi json_encode() peut ne pas être appropriée est que, parfois, vous avez besoin pour prévenir " à être produites, par exemple,

<div onclick="alert(???)" />

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