Question

Je générer javascript dans mon code PHP, et je dois assigner des variables php variables javascript. Malheureusement, parfois mes variables PHP contiennent des guillemets. par exemple:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";

génère une erreur javascript car le javascript résultant ressemblera à ceci:

<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';

Je sais que je peux utiliser regexp sur foo $ pour remplacer toutes les marques de ' avec \' mais cela est difficile pour diverses raisons. Est-ce que je peux faire à court de cela? Quelque chose comme la fonction q() perl ...

Était-ce utile?

La solution

J'ai essayé de faire cela?

$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';

Voir: http://php.net/manual/en/function.addslashes .php

Autres conseils

Cela devrait être un pas dans la bonne direction:

addcslashes($str, "\"\r\n\\\t/\0..\37");

Êtes-vous sûr? Est-il pas:

var foo = ''Dis here be a "string"'

Afin d'éviter la double 'essayer:

$foo = "\'Dis here be a \"string\"";

ou

$foo = '\\\'Dis here be a "string"';

Il est également intéressant de noter que vous pouvez utiliser un fichier PHP en tant que fichier JavaScript

<script type="text/javascript" src="js/main.php"></script>

Et vous êtes en mesure d'exécuter du code PHP dans ce fichier, ainsi que le code JavaScript de sortie en écho de PHP.

Puisque vous utilisez la valeur finale en JavaScript, j'utiliser json_encode:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";

Et il sera correctement sortie:

<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>

Remarquez que je ne mets un jeu supplémentaire de guillemets autour de la fonction json_encode. Il ajoutera les citations nécessaires pour faire automatiquement une chaîne JavaScript valide.

La réponse de Frank Farmer est intéressant, mais il est échapper à des choses qui ne ont pas besoin d'être échappé, comme les onglets.

Essayez cet extrait, il fonctionne très bien:

<script type="text/javascript">
    alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>

Depuis que je suis toujours connecté à une base de données dans mes scripts PHP qui passent du texte directement dans les chaînes Javascript, je me penche sur real_escape_string pour faire mon travail sale. addslashes () ne gère pas les nouvelles lignes et parfois se faufiler dans des chaînes je passe à Javascript.

Un $sql->real_escape_string($string) simple, fait tout mieux, quelle que soit la base de données échapper recrache dans une forme Javascript convivial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top