PHP отображает большой блок текста


Я новичок в PHP, и я не могу понять, каковы правила использования функции echo. Например, если мне нужно повторить большой блок css/js, нужно ли добавлять эхо к каждой строке текста или есть способ повторить большой блок кода одним эхом?

Когда я пытаюсь повторить большой блок кода, подобный этому, я получаю ошибку:

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 {

}

Есть ли лучший способ эхо-передачи больших блоков кода без большой работы (например, добавление эха в каждую строку)?

 39
Author: Thomas, 2010-04-20

11 answers

Один из вариантов - выйти из блока php и просто написать HTML.

С вашим кодом, после открывающей фигурной скобки вашего оператора if, завершите PHP:

if (is_single()) { ?>

Затем удалите echo ' и ';

После всего вашего html и css, перед закрытием }, напишите:

<? } else {

Если текст, который вы хотите написать на странице, является динамическим, это становится немного сложнее, но пока это должно работать нормально.

 61
Author: hookedonwinter, 2010-04-20 04:57:55

Синтаксис Heredoc может быть очень полезен:

// 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;
 129
Author: nickf, 2010-04-20 05:00:45

Выезд наследственность. Пример:

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

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

Также сейчас. но внутри блока синтаксический анализ не выполняется.

echo <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
 19
Author: Galen, 2015-01-10 15:57:26

Чувак, PHP - это не perl!
PHP может просто сбежать из 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!
}
?>

Интересно, почему так много людей прилипло к уродливому heredoc.

 6
Author: Your Common Sense, 2010-04-20 05:12:38

Повторение текста, содержащего разрывы строк, нормально, и нет ограничений на количество текста или строк, которые вы можете повторить сразу (за исключением доступной памяти).

Ошибка в вашем коде вызвана неэкранированными одинарными кавычками, которые появляются в строке.

Смотрите эту строку:

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

Вам нужно будет избежать этих одинарных кавычек в строке PHP, независимо от того, является ли она одной строкой или нет.

Однако есть еще один хороший способ повторить большие строки, и это закрыть PHP заблокируйте и откройте его снова позже:

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 {

}

Или другая альтернатива, которая, вероятно, лучше для удобства чтения, состоит в том, чтобы поместить весь этот статический HTML на другую страницу и включить() его.

 5
Author: thomasrutter, 2010-04-20 05:02:50

Ваша проблема на самом деле вызвана:

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

Вам нужно избежать одинарных кавычек, чтобы быть \'

Однако: Использование Heredoc - гораздо лучшая идея, так как в целом он будет намного чище.

 5
Author: Mitch Dempsey, 2010-04-20 05:03:20

Чтобы расширить ответ @hookedonwinter, вот альтернативный (более чистый, на мой взгляд) синтаксис:

<?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
Author: moteutsch, 2014-03-04 12:02:56

Просто вырвись там, где тебе нужно.

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

Не используйте сокращенную форму. <? конфликтует с XML и по умолчанию отключен на большинстве серверов.

 1
Author: user186658, 2016-09-23 15:03:07

Я предпочитаю объединять несколько строк вместе. Это работает как для echo, так и для переменных. Также некоторые IDE автоматически инициализируют новые строки, если вы нажмете enter. Этот синтаксис также генерирует небольшие выходные данные, потому что в строках гораздо меньше пробелов.

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>'
    ;

Обычно я начинаю с пустой строки, а затем добавляю к ней бит за битом:

$foo = '';

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

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

(Пожалуйста, прекратите посты типа "э-э-э. Ты отвечаешь на Вопрос, заданный пять лет назад." Почему нет? Есть много людей, которые ищут ответ. И что плохого в том, чтобы использовать идеи пятилетней давности? Если они не найдут "своего" решения, они откроют новый вопрос. Тогда первые пять ответов будут только "используйте функцию поиска, прежде чем спрашивать!", Поэтому я даю вам другое решение для решения подобных проблем.)

 0
Author: hiddenAlpha, 2015-01-03 20:25:56
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
 0
Author: 蔡正海, 2016-01-07 02:18:26

Вы можете добиться этого, напечатав свою строку следующим образом:

<?php $string ='here is your string.'; print_r($string); ?>
 -1
Author: Shams Reza, 2017-01-23 10:13:41