Pergunta

Estou gerando algum javascript no meu código PHP e preciso atribuir algumas variáveis ​​php a variáveis ​​javascript.Infelizmente, às vezes minhas variáveis ​​PHP contêm aspas.por exemplo:

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

irá gerar um erro de javascript porque o javascript resultante ficará assim:

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

Eu sei que posso usar regexp em $foo para substituir todos ' marcas com \' mas isso é difícil por vários motivos.Há algo que eu possa fazer além disso?Algo semelhante ao perl q() função...

Foi útil?

Solução

Tentei fazer isso?

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

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

Outras dicas

Este deve ser um passo na direção certa:

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

Tem certeza?Não é:

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

Para evitar o duplo 'tente:

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

ou

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

Também é importante notar que você pode usar um arquivo PHP como um arquivo JavaScript

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

E você é capaz de executar código PHP nesse arquivo, bem como gerar código JavaScript ecoando do PHP.

Como você está usando o valor final em JavaScript, eu usaria json_encode:

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

E a saída será correta:

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

Observe que não coloquei um conjunto extra de aspas ao redor do json_encode função.Ele adicionará as aspas necessárias para torná-la uma string JavaScript válida automaticamente.

A resposta de Frank Farmer é interessante, mas está escapando de algumas coisas que não precisam ser escapadas, como guias.

Experimente este trecho, funciona perfeitamente:

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

Como estou sempre conectado a um banco de dados em meus scripts PHP que passam texto diretamente para strings Javascript, confio em real_escape_string para fazer meu trabalho sujo.addlashes() não lida com novas linhas e às vezes elas se infiltram nas strings que estou passando para o Javascript.

Um simples $sql->real_escape_string($string) torna tudo melhor, escapando de tudo o que o banco de dados exibe em um formato compatível com Javascript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top