2009-07-08 9 views
3

Souvent, lors de l'écriture PHP Je vais l'avoir sortie du code HTML comme ceci -échapper des guillemets doubles des attributs HTML sortie par PHP

echo "<a href="../" title="link title">".$link_text."</a>"; 

Il est évident que ce ne sera pas analyser comme je l'ai besoin pour échapper aux guillemets doubles dans la attributs de l'élément <a>. Existe-t-il une regex qui ferait cela rapidement plutôt que d'ajouter manuellement les antislash?

Une autre chose - l'expression rationnelle ne doit pas échapper à des guillemets doubles en dehors de l'étiquette (par exemple, où j'ai apposé la variable $link_text

Toutes les idées

Répondre

13

Vous devez simplement utiliser les guillemets simples à la place.? :

echo '<a href="../" title="link title">' . $link_text . '</a>'; 
+5

ne pas oublier htmlspecialchars ($ link_text) – Tomalak

+1

Je ne suis pas d'accord avec htmlspecialchars en ligne lors de l'impression, au moment où vous imprimez tous les arguments devraient déjà être propres. – joebert

+0

de toute façon, @ joebert, htmlspecialchars doit être utilisé avant l'impression :) –

5

utilisation (Cette syntaxe ne vous inquiétez pas des citations, etc.)

echo <<<EOT 
<a href="../" title="link title">$link_text</a> 
EOT; 
+1

Je pense que les citations extérieures ne sont pas destinées à apparaître là. – Svante

+0

désolé mon erreur – Ish

3

Je suggère fortement d'utiliser des modèles plutôt que d'essayer de créer des chaînes.

En PHP brut:

<a href="../" title="link title"><?php echo $link_text; ?></a> 
+1

Point pris - bien qu'il y ait des moments où je veux juste sortir rapidement une petite chaîne de HTML (par exemple une fonction ou une méthode) et utiliser un moteur de template est un peu exagéré. – Phil

8

Solutions Je peux venir avec (non sans échapper):

  • guillemets simples

    echo '<a href="../">' . $link_text. '</a>'; 
    
  • Utilisez des guillemets doubles

    echo "<a href='../'>$link_text</a>"; 
    
  • sprintf

    echo sprintf('<a href="../">%s</a>', $link_text); 
    
  • Utilisez heredoc

    echo <<<EOF 
    <a href="../">$link_text</a> 
    EOF; 
    
  • Utilisez le moteur modèle comme smarty

  • sortie PHP mode:

    ?><a href="../"><?php echo $link_text ?></a><?php // other code... 
    

BTW, assurez-vous d'utiliser htmlspecialchars() sur la variable $link_text, ou vous aurez un trou de sécurité XSS.

+0

Merci - on dirait de passer à des guillemets simples est la solution simple (et peut-être le plus rapide?). Aussi - apprécier la préoccupation au sujet de la sortie de nettoyage en utilisant htmlspecialchars(). Je l'ai laissé hors de l'exemple de code pour plus de clarté. – Phil

+0

lol pourquoi 'echo sprintf' utilise simplement 'printf';) –

0

utiliser des guillemets simples ou utiliser heredoc. Je préférerais le dernier.

0

Je pense que vous pouvez utiliser

http://www.example.com/.../Learning-Tutorials/ACTIVE-USER-ACCOUNT/verify.php?email='.$email.'&hash='.$hash.' 

"<a href="//www.example.com/.../Learning-Tutorials/ACTIVE-USER-ACCOUNT/verify.php?email="$email&hash=$hash>Click Here to Active</a>" 

essayer.

Questions connexes