混合HTML和PHP代码中的字符串操作

混合HTML和PHP代码中的字符串操作,php,Php,下面的代码是top oh my php网页的示例代码。在特定位置输出php变量 我想实现一个HTML到PDF的转换器,但它要求我将所有代码放入一个单独的变量中,PDF转换器将在其类中使用该变量。我怎样才能把我现有的代码放进一个变量中,比如:$html,而不必打开所有的PHP变量,删除所有内容并连接整个地方?我曾想过使用herdoc语法,但它不喜欢,我有点困惑,因为我过去从未使用过它。关于如何实现这一点有什么想法吗 理想情况下,这就是我想做的: $html = <<<EOD &l

下面的代码是top oh my php网页的示例代码。在特定位置输出php变量

我想实现一个HTML到PDF的转换器,但它要求我将所有代码放入一个单独的变量中,PDF转换器将在其类中使用该变量。我怎样才能把我现有的代码放进一个变量中,比如:
$html
,而不必打开所有的PHP变量,删除所有内容并连接整个地方?我曾想过使用
herdoc
语法,但它不喜欢
,我有点困惑,因为我过去从未使用过它。关于如何实现这一点有什么想法吗

理想情况下,这就是我想做的:

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

这是我想避免的…

据我在手册中看到的,不可能在herdoc中调用函数。一个不那么麻烦的解决方案是:

$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;
$config\u print=configuration::getValue(6);
$lang_print=$lang[“FAI_R”][“PRT”][“TITLE”][“HEADER”];

$html=
herdoc
是php语法,因此它需要位于php标记中。php文档解释了
herdoc
字符串中变量的行为:

herdoc文本的行为就像一个双引号字符串,没有双引号。这意味着herdoc中的引号不需要转义。。。变量是展开的,但在herdeoc中表达复杂变量时必须像用字符串一样小心

文档中也有一些示例

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

?>

本手册专门介绍了PHP提供的各种字符串语法(迄今为止有4种)。基本上缺少字符串插值:

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

$html=这是输出缓冲的一个很好的用途

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();
ob_start();
?>

我搞不懂你到底在问什么。如果代码中包含PHP,您是否只想知道如何进行字符串连接?因为这只是带有
$html=“…”的普通老PHP$arr['a][1][etc]。" ... "; $html.=“…”。。。等等。
另外,$lang[“FAI_R”][“PRT”][“TITLE”][“HEADER”]是一个很好的例子,它本应该是一个对象,而不是一个4深数组=)让我补充一下这个问题。4-deep数组之所以存在,是因为它是一种语言存储,其值根据用户选择的语言而变化。只需将
$html
的内容(EOD
标记之间的所有内容保持原样)放入一个单独的
模板.php
。然后你可以做
ob_start();包括('template.php')$html=ob_get_clean()。问题解决了。@Jon对此表示感谢,工作正常。我以前从未见过下划线函数,它是新的吗?我以前也从未见过。我肯定会测试的。我喜欢这个主意,它和其他方法有什么不同?这似乎是最简单、最容易快速合并的方法,它们大致相当。当然我更喜欢我的方法:)
$html = <<<EOD
<div id="topHeaderView">$value</div>
 <table>
  <tr>
<td>{$lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]}</td>
    </tr>
EOD;
$html = '<div id="topHeaderView">' . htmlspecialchars($value) . '</div>
 <table>
  <tr>
<td>' . htmlspecialchars($lang["FAI_R"]["PRT"]["TITLE"]["HEADER"]) . '</td>
    </tr>';
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();