2010-07-27 15 views
18

que he probado (pero no su trabajo):¿Cómo poner php dentro de JavaScript?

<?php 
    $htmlString= 'testing'; 
?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     var htmlString=<?php echo $htmlString; ?>; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

Aquí es el tutorial que he utilizado para tal fin:

Respuesta

41

Prueba esto:

<?php $htmlString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     // notice the quotes around the ?php tag   
     var htmlString="<?php echo $htmlString; ?>"; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

Cuando se encuentra con problemas como éste, una buena idea es comprobar su navegador para obtener los errores de JavaScript. Los diferentes navegadores tienen diferentes formas de mostrar esto, pero busca una consola de JavaScript o algo así. Además, verifique el origen de su página según lo visualiza el navegador.

A veces los principiantes se confunden con las comillas de la cadena: en la parte de PHP, asignó 'testing' a $htmlString. Esto pone un valor de cadena dentro de esa variable, pero el valor no tiene las comillas: son solo para el intérprete, por lo que sabe: oh, ahora viene una cadena literal.

+1

@ inf3rno, si es incorrecto, deberíamos arreglarlo! no podemos dejar una respuesta incorrecta aquí ... ¿qué es exactamente lo que está mal? (supongo que te opones al último párrafo ... hm ... es un poco difícil de explicarle esto a un principiante - ¿tienes una mejor toma?) –

+0

@ inf3rno, oh ... Acabo de ver tu propia respuesta. Hm ... tienes un punto allí ... excepto, creo que para el nivel OP es ATM, es un poco TMI. Parece que todavía no se ha metido en la cabeza algunas cosas básicas. –

+3

Es fácil de explicar, si quieres inyectar una cadena al código javascript, tienes que escaparte para javascript ... json_encode hace eso ... Se es muy similar a la prevención de inyección sql, por ahí tienes t o escape para sql ... – inf3rno

23

Estas comillas alrededor de la cadena de desaparecidos:

... 
var htmlString="<?php echo $htmlString; ?>"; 
... 
+1

'$ htmlString =" \ "" 'eh, me pregunto por qué ese JavaScript dejó de funcionar repentinamente ... – zzzzBov

5

necesita comillas alrededor de la cadena en javascript

var htmlString="<?php echo $htmlString; ?>"; 
+1

Batido por un minuto:] – Anraiki

10

Todas las explicaciones anteriores no funcionan si trabaja con archivos .js. Si desea analizar PHP en archivos .js, usted tiene que hacer cambios en su servidor en los modfiying el .htaccess en el que residen los archivos .js usando los siguientes comandos:

<FilesMatch "\.(js)$"> 
    AddHandler application/x-httpd-php .js 
</FilesMatch> 

A continuación, un archivo de Test.js archivos que contienen el siguiente código se ejecutará .JS en el lado del cliente con el PHP analizada en el lado del servidor:

<html> 
<head> 
<script> 
function myFunction(){ 
    alert("Hello World!"); 
} 
</script> 
</head> 
<body> 
<button onclick="myFunction()"><?php echo "My button";?></button> 
</body> 
</html> 
7

la única forma correcta de poner los datos del lado del servidor en genera código javascript:

<?php $jsString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript">  
     var jsStringFromPhp=<?php echo json_encode($jsString); ?>; 
     alert(jsStringFromPhp); 
    </script> 
    </body> 
</html> 

Con comillas simples, el contenido de su variable no se escapa contra HTML y javascript, por lo que es vulnerable a los ataques XSS ...

Por razones similares, recomiendo usar document.createTextNode() en lugar de configurar innerHTML. De c. es más lento, pero más seguro ...

+2

Técnicamente no es la * única * manera, pero sin duda es una manera segura.Dicho esto, para empezar no se debe construir JavaScript con PHP. – zzzzBov

+0

Depende del tipo de datos que le gustaría enviar. Los caracteres html Unicode no son los mismos que los caracteres JavaScript Unicode, por lo que debe transformarlos ... Otra forma de utilizar los servicios REST y una biblioteca adecuada del lado del cliente para manejar las solicitudes, por ejemplo, extjs o backbone. Por cierto. tienes que usar json_encode en ese caso también ... – inf3rno

Cuestiones relacionadas