42 votes

PHP Echo un gros bloc de texte

Je suis nouveau sur PHP et je ne peux pas comprendre quelles sont les règles d'utilisation de la fonction d'écho. Par exemple, si je dois faire écho à un grand bloc de css / js, dois-je ajouter un écho à chaque ligne de texte ou existe-t-il un moyen de faire écho à un grand bloc de code avec un seul écho?

Lorsque j'essaie de faire écho à un gros bloc de code comme celui-ci, j'obtiens une erreur:

 if (is_single()) {
echo '<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{
width:150px !important;
}
.form-label-left{
width:150px !important;
}
.form-line{
padding:10px;
}
.form-label-right{
width:150px !important;
}
body, html{
margin:0;
padding:0;
background:false;
}

.form-all{
margin:0px auto;
padding-top:20px;
width:650px !important;
color:Black;
font-family:Verdana;
font-size:12px;
}
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){
$('input_6').hint('ex: myname@example.com');
});
</script>';
}else {

}
 

Existe-t-il un meilleur moyen de faire écho à de gros blocs de code sans beaucoup de travail (ajouter de l'écho à chaque ligne par exemple)?

139voto

nickf Points 185423

La syntaxe Heredoc peut être très utile:

 // start the string with 3 <'s and then a word
// it doesn't have to be any particular string or length
// but it's common to make it in all caps.
echo <<< EOT
    in here is your string
    it has the same variable substitution rules
    as a double quoted string.
    when you end it, put the indicator word at the
    start of the line (no spaces before it)
    and put a semicolon after it
EOT;
 

70voto

hookedonwinter Points 4200

Une option consiste à sortir du bloc php et à écrire simplement du HTML.

Avec votre code, après l'accolade ouvrante de votre instruction if, terminez le PHP:

 if (is_single()) { ?>
 

Supprimez ensuite le echo ' et le ';

Après tous vos html et css, avant la fermeture } , écrivez:

 <? } else {
 

Si le texte que vous souhaitez écrire sur la page est dynamique, cela devient un peu plus délicat, mais pour l'instant cela devrait fonctionner correctement.

20voto

Galen Points 20535

Découvrez heredoc . Exemple:

 echo <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;

echo <<<"FOOBAR"
Hello World!
FOOBAR;
 

Le est également nowdoc mais aucune analyse n'est effectuée à l'intérieur du bloc.

 echo <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
 

7voto

thomasrutter Points 42905

En écho à un texte qui contient des sauts de ligne est fine, et il n'y a pas de limite sur la quantité de texte ou de lignes que vous pouvez écho à la fois (sauf pour la mémoire disponible).

L'erreur dans votre code est causée par le non échappés guillemets simples qui apparaissent dans la chaîne.

Voir cette ligne:

$('input_6').hint('ex: myname@example.com');

Vous auriez besoin d'échapper les guillemets dans une chaîne PHP si c'est une seule ligne ou pas.

Il est un autre bon moyen de faire écho des grandes chaînes, si, et c'est pour fermer le bloc PHP et de l'ouvrir à nouveau plus tard:

if (is_single()) {
  ?>
<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{
width:150px !important;
}
.form-label-left{
width:150px !important;
}
.form-line{
padding:10px;
}
.form-label-right{
width:150px !important;
}
body, html{
margin:0;
padding:0;
background:false;
}

.form-all{
margin:0px auto;
padding-top:20px;
width:650px !important;
color:Black;
font-family:Verdana;
font-size:12px;
}
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){
$('input_6').hint('ex: myname@example.com');
});
</script>
  <?php
}else {

}

Ou d'une autre alternative, ce qui est probablement mieux pour la lisibilité, est de mettre tout ce que statique HTML dans une autre page et include() il.

6voto

Man, PHP n'est pas perl!
PHP peut simplement échapper au HTML :) http://www.php.net/manual/en/language.basic-syntax.phpmode.php

 if (is_single()) {
//now we just close PHP tag
?>
</style> 
<script> 
<blah blah blah>
<?php
//open it back. here is your PHP again. easy!
}
?>
 

Je me demande pourquoi tant de gens sont restés fidèles à laide hérédoc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X