web-dev-qa-db-fra.com

PHP Écho d'un gros bloc de texte

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

Quand j'essaye 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: [email protected]');
});
</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)?

40
Thomas

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

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

if (is_single()) { ?>

Ensuite, supprimez le echo ' et le ';

Après tout votre code html et css, avant le } de clôture, écrivez:

<? } else {

Si le texte que vous souhaitez écrire sur la page est dynamique, cela devient un peu plus compliqué, mais pour le moment, cela devrait fonctionner correctement.

62
hookedonwinter

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;
132
nickf

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;
20
Galen

Faire écho à un texte contenant des sauts de ligne convient, et il n'y a aucune limite quant à la quantité de texte ou de lignes que vous pouvez répercuter en une fois (sauvegarde de la mémoire disponible).

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

Voir cette ligne:

$('input_6').hint('ex: [email protected]');

Vous devez échapper ces guillemets simples dans une chaîne PHP, que ce soit sur une seule ligne ou non.

Cependant, il existe un autre bon moyen d'écho pour les grandes chaînes: fermer le bloc PHP et le rouvrir 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: [email protected]');
});
</script>
  <?php
}else {

}

Ou une autre alternative, qui est probablement meilleure pour la lisibilité, est de mettre tout ce HTML statique dans une autre page et de l’inclure ().

6
thomasrutter

Man, PHP n'est pas Perl!
PHP peut juste échapper à HTML:) http://www.php.net/manual/fr/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 ont collé au vilain hérédoc.

6
Your Common Sense

Votre problème est effectivement causé par:

$('input_6').hint('ex: [email protected]');

Vous devez échapper aux guillemets simples pour être \' 

Cependant: L'utilisation d'un Heredoc est une bien meilleure idée car elle sera beaucoup plus propre dans l'ensemble.

5
Mitch Dempsey

Pour développer la réponse de @ hookedonwinter, voici une autre syntaxe (plus propre, à mon avis):

<?php if (is_single()): ?>
    <p>This will be shown if "is_single()" is true.</p>
<?php else: ?>
    <p>This will be shown otherwise.</p>
<?php endif; ?>
2
moteutsch

Juste sortir où vous avez besoin.

<html>
(html code)
<?php
(php code)
?>
(html code)
</html>

N'utilisez pas de forme abrégée. <? est en conflit avec XML et est désactivé par défaut sur la plupart des serveurs.

1
user186658
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
0
蔡正海

Je préfère concaténer plusieurs chaînes ensemble. Cela fonctionne aussi bien pour echo ET que pour les variables ..__ De plus, certains IDE initialisent automatiquement de nouvelles lignes si vous tapez enter . Cette syntaxe génère également une petite sortie car il y a beaucoup moins d'espaces dans les chaînes.

echo ''
    .'one {'
    .'    color: red;'
    .'}'
    ;

$foo = ''
    .'<h1>' . $bar . '</h1>'  // insert value of bar
    .$bar                     // insert value of bar again
    ."<p>$bar</p>"            // and again
    ."<p>You can also use Double-Quoted \t Strings for single lines. \n To use Escape Sequences.</p>"
    // also you can insert comments in middle, which aren't in the string.
    .'<p>Or to insert Escape Sequences in middle '."\n".' of a string</p>'
    ;

Normalement, je commence avec une chaîne vide, puis j'ajoute petit à petit:

$foo = '';

$foo .= 'function sayHello()'
    .'    alert( "Hello" );'
    ."}\n";

$foo .= 'function sum( a , b )'
    .'{'
    .'    return a + b ;'
    ."}\n";

(S'il vous plaît, arrêtez les messages du genre "euh. Vous répondez à une question de cinq ans". Pourquoi pas? Beaucoup de gens cherchent une réponse. Et pourquoi ne pas utiliser des idées de cinq ans? S'ils ne trouvent pas "leur" solution ils ouvriraient une nouvelle question. Les cinq premières réponses ne sont que "utilisez la fonction de recherche avant de poser la question!". Je vous donne donc une autre solution pour résoudre des problèmes comme celui-ci.)

0
hiddenAlpha