2011-05-25 15 views
10

Soy bastante nuevo en php, pero estoy atascado en este problema ... Digamos que espero poner un enlace a otro sitio con un parámetro dado, ¿cómo lo hago correccional?¿Usar variables PHP dentro de etiquetas HTML?

Esto es lo que tengo ahora:

<html> 
<body> 
<?php 
    $param = "test"; 

    echo "<a href="http://www.whatever.com/$param">Click Here</a>; 
?> 

</body> 
</html> 

Respuesta

18

Bueno, para empezar, es posible que no quiero eco de uso excesivo, porque (como es el problema en su caso) se puede hacer muy fácilmente errores en comillas.

Esto sería arreglar el problema:

echo "<a href=\"http://www.whatever.com/$param\">Click Here</a>"; 

pero que realmente debería hacer esto

<?php 
    $param = "test"; 
?> 
<a href="http://www.whatever.com/<?php echo $param; ?>">Click Here</a> 
+0

Gracias, eso funcionó. Buscaré más en la separación de HTML y PHP. Supongo que :-) – Jasper

+0

primer ejemplo es bueno para mí, pero supongo que para el segundo, debes repetir el Ave

1

puede incrustar una variable en una cadena entre comillas dobles como mi primer ejemplo, o se puede utilizar concantenation (el período) como en mi segundo ejemplo:

echo "<a href=\"http://www.whatever.com/$param\">Click Here</a>";

echo '<a href="http://www.whatever.com/' . $param . '">Click Here</a>';

Observe que he escapado de las comillas dobles dentro de mi primer ejemplo con una barra diagonal inversa.

11

usted puede hacerlo de varias maneras, dependiendo del tipo de frases que utilice:

  • echo "<a href='http://www.whatever.com/$param'>Click here</a>";
  • echo "<a href='http://www.whatever.com/{$param}'>Click here</a>";
  • echo '<a href="http://www.whatever.com/' . $param . '">Click here</a>';
  • echo "<a href=\"http://www.whatever.com/$param\">Click here</a>";

Las comillas dobles permiten las variables en el medio de la cadena, donde las comillas simples son literales de cadena y, como tal, interpretan todo como una cadena de caracteres, nada más, ni siquiera \n se expandirán para indicar el nuevo carácter de línea, solo serán los caracteres \ y n en secuencia.

Debe tener cuidado con el uso de cualquier tipo de cotización que usted decida. No puede usar comillas dobles dentro de una cadena entre comillas dobles (como en su ejemplo) ya que terminará la cadena anticipadamente, que no es lo que desea. Sin embargo, puede evitar las comillas dobles internas si agrega una barra diagonal inversa.

En una nota aparte, es posible que deba tener cuidado con los ataques XSS al imprimir variables no seguras (rellenados por el usuario) en el navegador.

+2

El tercero es la mejor opción, ya que los valores predeterminados en HTML son comillas dobles, y las cadenas en comillas simples se analizan más rápido en PHP. – Midas

+2

@Midas Aparentemente hay 3 microsegundos (más de 1k iteraciones) en http://www.phpbench.com que sugieren que se trata de una micro-optimización que no vale la pena. Ver http://stackoverflow.com/questions/482202/is-there-a-performance-benefit-single-quote-vs-double-quote-in-php – Nick

1

HI Jasper,

usted puede hacer esto:

<? 
sprintf("<a href=\"http://www.whatever.com/%s\">Click Here</a>", $param); 
?> 
2

le recomiendo usar el corto "en lugar de 'Si lo hace, usted no ya no tienen que escapar de las comillas (\')

En ese caso, usted escribiría

echo '<a href="http://www.whatever.com/'. $param .'">Click Here</a>'; 

Pero mira en respuesta Nicolaas' 'lo que realmente debe hacer' para aprender a producir un código más limpio.

5

Hay una manera taquillera de hacer esto que he estado usando recientemente. Esto podría necesitar ser configurado, pero debería funcionar en la mayoría de las instalaciones de PHP. Si usted está almacenando el enlace en una variable de PHP, puede hacerlo de la siguiente manera con sede fuera de la OP:

<html> 
    <body> 
    <?php 
     $link = "http://www.google.com"; 
    ?> 
    <a href="<?= $link ?>">Click here to go to Google.</a> 
    </body> 
</html> 

Este evaluará la variable como una cadena, en forma abreviada esencia de echo $ enlace;

Cuestiones relacionadas