0

以下のコードは、トップ oh my php Web ページのサンプル コードです。特定の場所に出力されるphp変数があります。

HTML から PDF へのコンバーターを実装したいのですが、すべてのコードを、PDF コンバーターがそのクラスで使用する単一の変数に入れる必要があります。既存のものを単一の変数に入れるにはどうすればよいですか:$htmlすべての PHP 変数を開いて、すべてをエスケープし、場所全体を連結する必要はありませんか? 私はheredoc構文を使用することを考えていましたが、それは好きではなく <?php ?>、過去に使用したことがないのでちょっと混乱しています. これを達成する方法についてのアイデアはありますか?

理想的には、これは私がやりたいことです:

$html = <<<EOD
<div id="topHeaderView"><?php echo configuration::getValue(6); ?></div>
  <table>
   <tr>
     <td><?php echo $lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]; ?></td>
   </tr>
EOD;

$lang["FAI_R"]["PRT"]["TITLE"]["HEADER"] 上記は、または によって出力された値をキャプチャしません configuration::getValue(6)

代わりに:

$html = "";
$html .= "<div id=\"topHeaderView\">".configuration::getValue(6)."</div>";
$html .= "<table>";
$html .= "<tr>";
$html .= "<td>".$lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]."</td>";
$html .= "</tr>";

これは避けたい…。

4

4 に答える 4

0

マニュアルには、 PHP が提供するさまざまな文字列構文 (現在までに 4 つ) に専念する章全体があります。基本的に文字列補間がありません:

$html = <<<EOD
<div id="topHeaderView">$value</div>
 <table>
  <tr>
<td>{$lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]}</td>
    </tr>
EOD;

フィドル

しかし、それはそれほど単純ではありません。PHP を使用して別の言語 (HTML) でコードを生成しており、生成されたコードが有効であることを確認する必要があります。したがって、ランダムなものを注入することはできません。HTML 内にリテラル テキストを挿入するには、 htmspecialchars()を使用する必要があります。そして、変数補間は、関数ではなく変数を期待してます。したがって、ここではヒアドキュメント構文の利点はほとんどありません。連結は、より単純な代替手段になります。

$html = '<div id="topHeaderView">' . htmlspecialchars($value) . '</div>
 <table>
  <tr>
<td>' . htmlspecialchars($lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]) . '</td>
    </tr>';

エスケープして連結しないと言いました。私はあなたの言う事が分かります。そのため、複雑な HTML の生成は通常、テンプレート エンジンに依存しています。1 つを見つけるか、独自のものを構築します。

于 2013-06-20T14:31:48.067 に答える
0

これは、出力バッファリングの有効な使用法です

ob_start();
?><div id="topHeaderView"><?php echo configuration::getValue(6); ?></div>
<table>
    <tr>
        <td><?php echo $lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]; ?></td>
    </tr>
<?php
$html = ob_get_clean();
于 2013-06-20T14:31:57.377 に答える
0

heredocは php 構文であるため、php タグ内にある必要があります。PHP のドキュメント (こちらheredoc) では、文字列内の変数の動作について説明しています。

ヒアドキュメント テキストは、二重引用符なしで、二重引用符で囲まれた文字列のように動作します。これは、ヒアドキュメント内の引用符をエスケープする必要がないことを意味します...変数は展開されますが、ヒアドキュメント内で複雑な変数を文字列と同様に表現する場合は、同じ注意が必要です。

ドキュメントにもいくつかの例があります。

<?php

$value = configuration::getValue(6);
$header = $lang["FAI_R"]["PRT"]["TITLE"]["HEADER"];

$html = <<<EOD
<div id="topHeaderView">$value</div>
 <table>
  <tr>
   <td>$header</td>
    </tr>
EOD;

?>
于 2013-06-20T14:20:57.900 に答える
0

マニュアルを見る限り、HEREDOC 内で関数を呼び出すことはできません。面倒でない解決策は次のとおりです。

$config_print = configuration::getValue(6);
$lang_print = $lang["FAI_R"]["PRT"]["TITLE"]["HEADER"];

$html = <<<EOD
<div id="topHeaderView">$config_print</div>
  <table>
   <tr>
     <td>$lang_print</td>
   </tr>
EOD;

編集:または、次を使用できます:

$html = <<<EOD
<div id="topHeaderView"><?= _( configuration::getValue(6) ); ?></div>
  <table>
   <tr>
     <td><?= _( $lang["FAI_R"]["PRT"]["TITLE"]["HEADER"] ); ?></td>
   </tr>
EOD;
于 2013-06-20T14:12:46.317 に答える