PHP에서 HTML을 어떻게 에코 할 수 있습니까?


122

페이지를 생성하기 위해 조건부로 HTML을 출력하고 싶은데, PHP 4+에서 HTML의 여러 줄 조각을 에코하는 가장 쉬운 방법은 무엇입니까? Smarty와 같은 템플릿 프레임 워크를 사용해야합니까?

echo '<html>', "\n"; // I'm sure there's a better way!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";

2
\ n html에서는 작동하지 않습니다. 에코 "<br>"를 의미 한 것 같습니다.
Weishi 쩡

MVC에서와 같이 논리를 뷰에서 분리하는 것이 좋습니다. - 스크립트 로직에서보기의 separete하는 나뭇 가지처럼 templetig 엔진을 사용 twig.sensiolabs.org Insted 당신의 PHP 스크립트에 HTML 마크 업을 구현하는 것이 다른 방식으로 라운드를 수행하십시오. 사원을 나뭇 가지에 PHP 변수를 구현합니다. 내가 의미하는 바를 이해하자마자이 앞치마의 혜택을 보게 될 것입니다. Twig는 이런 종류의 문제를 해결합니다. 작은 코드의 경우 자신 만의 twig 확장을 작성할 수 있으며이를 secounds와 함께 사용하여 복잡하지만 반복적 인 작업을 수행 할 수 있습니다.
DevWL

답변:


269

PHP에서 HTML을 에코하는 몇 가지 방법이 있습니다.

1. PHP 태그 사이

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>

2. 메아리 속에서

if(condition){
     echo "HTML here";
}

에코를 사용하면 HTML에서 큰 따옴표를 사용하려면 다음과 같이 작은 따옴표 에코를 사용해야합니다.

echo '<input type="text">';

또는 다음과 같이 이스케이프 할 수 있습니다.

echo "<input type=\"text\">";

3. Heredocs

4. Nowdocs (PHP 5.3.0 기준)

템플릿 엔진 은 대부분 HTML이 포함 된 문서에서 PHP를 사용하는 데 사용됩니다. 사실 PHP의 원래 목적은 템플릿 언어였습니다. 이것이 PHP에서 짧은 태그와 같은 것을 사용하여 변수를 에코 할 수있는 이유입니다 (예 :) <?=$someVariable?>.

구문을 더욱 간결하게 만드는 다른 템플릿 엔진 (예 : Smarty, Twig 등)이 있습니다 (예 :) {{someVariable}}.

템플릿 엔진 사용의 주요 이점은 디자인 ( 프레젠테이션 로직 )을 코딩 ( 비즈니스 로직 ) 과 분리하여 유지하는 것 입니다. 또한 장기적으로 코드를 더 깨끗하고 유지 관리하기 쉽게 만듭니다.

더 많은 질문이 있으면 의견을 남겨주세요.

자세한 내용은 PHP 문서 에서 이러한 내용을 확인할 수 있습니다 .


참고 : PHP 짧은 태그 <??>함께 사용할 경우, 그들은 단지 사용할 수 있기 때문에 권장되지 않습니다 short_open_tagphp.ini의 구성 파일 지정, 또는 PHP가 함께 구성된 경우 --enable-short-tags옵션을 선택합니다. 5.4 이후의 설정에 관계없이 사용할 수 있습니다 .


7
"/ * HTML here * /"가 정말 "<!-HTML here->"이 아니어야합니까? ;)
Jeremy Logan

네 첫 번째 게시물에서 정확합니다. 나는 코드 haha에 갇혔다. 감사합니다.
Chris Bier

1
감사합니다, @Chris B. 도움이되었습니다. 에코를 사용하면 HTML에서 큰 따옴표를 사용하려면 다음과 같이 작은 따옴표 에코를 사용해야합니다. 실제로 이것을 놓쳤습니다.
Ayush Mishra

1
대답 의이 첫 번째 링크 는 이제 제거되었습니다. (
mcon

실제로 5.4 이후부터 사용할 수있는 유일한 짧은 태그는 짧은 에코 태그 <?=$var?>입니다. 짧은 태그는 평소와 같이 사용하지 않는 것이 좋으며 제거해야합니다 ( <? doStuff() ?>).
igorsantos07

65

다음과 같이 시도하십시오 ( heredoc 구문).

$variable = <<<XYZ
<html>
<body>

</body>
</html>
XYZ;
echo $variable;

8
@MhdSyrwan 그냥 임의의 문자, 당신은 여기에서 더 읽을 수 있습니다 php.net/manual/en/…
lfx

1
자세히 설명 하시겠습니까? 여는 또는 닫는 PHP 대괄호는 보이지 않지만 HTML과 PHP는 모두 표시됩니다. -링크가 작동하고 더 잘 답변하지만 댓글이 아닌 답변 텍스트에 있어야 할 수도 있습니다.
Julix

물론 @Julix 당신은 개방을 추가해야하고 ( 따라 PHP 태그를 닫는). 그는 단지 예를 짧게 만들고 싶었습니다.
Fahmi

나는 그것을 얻었다; 어떻게 든 이것이 heredocs 구문 (즉 전체 코드가 PHP입니다)을 놓쳤습니다. 나는 당시 PHP를 처음 접했고 다음과 같은 구문을 보는데 익숙했기 때문에 혼란 스러웠습니다 <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>. 내가 아주 처음 이었기 때문에 약간 오래된 내 댓글에 대한 답변을받는 것은 항상 재미 있습니다.
Julix

30

제어 구조에 대해 대체 구문 대체 구문을 사용하고 PHP에서 벗어날 수 있습니다.

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML, but it is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>

@Jeremy : 이것은 아마도 당신이 더 많은 것을 찾고 있지 않다고 가정하는 가장 직접적인 방법 일 것입니다 ... 당신은 더 많은 것을 찾고 있습니까?
Frank V

1
예, 특히 HTML 사이에 PHP 주석을 사용할 수있는 기능, 에코되지 않는 주석입니다.
TheFlash

15

기본적으로 PHP 태그 외부에 HTML을 둘 수 있습니다. 논리와 표현을 분리하기 위해 데이터를 표시하기 전에 필요한 모든 데이터 처리를 수행하는 것도 매우 유용합니다.

데이터 디스플레이 자체는 동일한 PHP 파일의 맨 아래에 있거나 대부분 HTML로 구성된 별도의 PHP 파일을 포함 할 수 있습니다.

이 컴팩트 한 스타일을 선호합니다.

<?php
    /* do your processing here */
?>

<html>
<head>
    <title><?=$title?></title>
</head>
<body>
    <?php foreach ( $something as $item ) : ?>
        <p><?=$item?></p>
    <?php endforeach; ?>
</body>
</html>

참고 : PHP 설정 <?php echo $var; ?><?=$var?>따라 대신 사용해야 할 수도 있습니다 .


7

나는이 스타일을 좋아한다.

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>

예, ASP 스타일 태그를 사용합니다. PHP와 HTML의 혼합은 내 눈에 매우 읽기 쉬운 것 같습니다. 트릭은 <%%>마커를 올바르게 얻는 것 입니다.


ASP 태그는 PHP 4+와 호환됩니까?
TheFlash 2009-07-08

4
예,하지만 그들이 지속되는 동안 그들을 가져옵니다-그들은 PHP에서 제거되고 있습니다 (어떤 버전인지 확실하지 않습니다 ... 그들이 아직 사라지지 않았다면)
Greg

7

또 다른 방법은 HTML을 별도의 파일에 넣고이 경우 자리 표시 자 [[content]]로 변경할 영역을 표시하는 것입니다. (str_replace 대신 sprintf를 사용할 수도 있습니다.)

$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);

또는 버퍼에 캡처 된 화면에 모든 PHP 항목을 출력하고 HTML을 작성한 다음 PHP 출력을 페이지에 다시 넣을 수 있습니다.

PHP를 작성하고 포착 한 다음 다시 작성하는 것이 이상하게 보일 수 있지만 모든 종류의 서식 지정 작업을 수행 할 수 있음을 의미합니다 ( heredoc 등)을 수행하고 페이지의 번거 로움없이 올바르게 출력 테스트 합니다. 방해가되는 템플릿. ( Joomla CMS 는 이런 방식으로 수행합니다, BTW.)

즉 :

<?php
    ob_start();
    echo('Hello, World!');
    $php_output = ob_get_contents();
    ob_end_clean();
?>
<h1>My Template page says</h1>
<?php
    echo($php_output);
?>
<hr>
Template footer

2

다음과 같이 단순히 인쇄 기능을 사용하여 PHP 파일의 텍스트를 에코합니다.

<?php

  print('
    <div class="wrap">

      <span class="textClass">TESTING</span>

    </div>
  ')
?>

2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));

1

Chris B의 답변 외에도 echo어쨌든 사용해야 하고 여전히 간단하고 구조적으로 유지하고 <?php stuff; ?>'s로 코드를 스팸하지 않으려면 아래 구문을 사용할 수 있습니다.

예를 들어 갤러리 이미지를 표시하려고합니다.

foreach($images as $image)
{
    echo
    '<li>',
        '<a href="', site_url(), 'images/', $image['name'], '">',
            '<img ',
                'class="image" ',
                'title="', $image['title'], '" ',
                'src="', site_url(), 'images/thumbs/', $image['filename'], '" ',
                'alt="', $image['description'], '"',
            '>',
        '</a>',
    '</li>';
}

Echo 는 여러 매개 변수를 사용하므로 들여 쓰기가 좋으면 꽤 좋아 보입니다. 또한 echowith 매개 변수를 사용 하는 것이 연결하는 것보다 더 효과적입니다.


1
echo '
<html>
<body>
</body>
</html>
';

또는

echo "<html>\n<body>\n</body>\n</html>\n";

1

이 시도:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

0

HTML을 에코하지 마십시오.

사용하려는 경우

<?php echo "<h1>  $title; </h1>"; ?>

이 작업을 수행해야합니다.

<h1><?= $title;?></h1>

-1

이것이 내가하는 방법입니다.

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.