如何解析“echo”中的字符串或HTML内容

时间:2011-06-15 19:53:00

标签: php forms

我有HTML内容(表单),只有在满足条件且将由echo方法显示时才会显示。我试图解析PHP中的代码。我收到语法错误,因为我需要在submit=""value=""等值旁边解析,所以我不确定如何解决此问题。以下是一个示例:

if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
  $allowtoEnterSN='True';   
  $a_handle= mysql_escape_string($_GET['handle']);
  echo '          <span class="activation_bold">Please activate your account to continue.</span></p>
          <form id="activate" name="activate" method="post" action="activate_check.php?handle='.$_POST['a_handle'].'&amp;serial_key='.$_POST['serial_key'].'">
            <p class="activation_reg">Please enter your Serial Key Number to activate.</p>
            <p class="activation_reg">
              <label for="user_name">Handle</label>
              <input name="user_name" type="text" class="activation_reg" id="user_name" />
            </p>
            <p class="activation_reg">
              <label for="serial_key">Serial Key Number</label>
              <input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
              <input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
              <input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />
            </p>
          </form>'  

}   

最新更新

if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
  $allowtoEnterSN='True';   
  $a_handle= mysql_escape_string($_GET['handle']);

  echo <<<HTML
  <p>
<span class="activation_bold">Please activate your account to continue.</span></p>

<form id="activate" name="activate" method="post" action="activate_check.php?handle={$_POST['a_handle']}&amp;serial_key={$_POST['serial_key']}">


        <p class="activation_reg">
          <label for="serial_key">Serial Key Number</label>
          <input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
          <input name="submit" type="submit" class="a_button" id="submit" value="Activate" />


          <input name="a_handle" type="hidden" id="a_handle" value="$a_handle" />
        </p>
      </form>
HTML;}  

最后更新时间为1634ct

if(isset($_GET['handle']) && !isset($_GET['serial_key']))
{
  $allowtoEnterSN='True';   
  $a_handle= mysql_escape_string($_GET['handle']);
  echo <<< EOD 
  <span class="activation_bold">Please activate your account to continue.</span></p>
          <form id="activate" name="activate" method="post" action="activate_check.php?handle='.$_POST['a_handle'].'&amp;serial_key='.$_POST['serial_key'].'">
            <p class="activation_reg">Please enter your Serial Key Number to activate.</p>
            <p class="activation_reg">
              <label for="user_name">Handle</label>
              <input name="user_name" type="text" class="activation_reg" id="user_name" />
            </p>
            <p class="activation_reg">
              <label for="serial_key">Serial Key Number</label>
              <input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
              <input name="submit" type="submit" class="a_button" id="submit" value="Activate" />
              <input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />
            </p>
          </form>
EOD;    
}           

4 个答案:

答案 0 :(得分:3)

您应该使用HEREDOC而不是单引号字符串,它将插入您需要的变量。将复杂变量括在{}

echo<<<HTML
<span class="activation_bold">Please activate your account to continue.</span></p>
      <form id="activate" name="activate" method="post" action="activate_check.php?handle={$_POST['a_handle']}&amp;serial_key={$_POST['serial_key']">

        <!-- SNIP -- >

        <p class="activation_reg">
          <label for="serial_key">Serial Key Number</label>
          <input name="serial_key" type="text" class="activation_reg" id="serial_key" size="40" />
          <input name="submit" type="submit" class="a_button" id="submit" value="Activate" />

          <!-- now just use $a_handle -->
          <input name="a_handle" type="hidden" id="a_handle" value="$a_handle" />
        </p>
      </form>
HTML;

ADDENDUM: HEREDOC的崩溃课程:

HEREDOC是一个多行字符串,它坚持格式化并且表现得像双引号字符串,相应地插入PHP变量。

要开始HEREDOC,请使用<<<运算符,后跟一些标识符(示例中为VAR)。在它自己的行的开头用相同的标识符(VAR)结束它,取消缩进,然后是分号(VAR;)。如果缩进或后跟空格,则无法正常工作。

$heredoc_var =<<<VAR
  Now you can type whatever you want including $variables.

  And over multiple lines.
VAR;  <--- No extra whitespace here and must be at the beginning of the line!!!!

答案 1 :(得分:0)

<input name="a_handle" type="hidden" id="a_handle" value="<? echo $a_handle ?>" />

你在单引号字符串中写echo,它不起作用。 应该是:

'.....<input name="a_handle" type="hidden" id="a_handle" value="'.$a_handle.'" />....'

问题:为什么要使用$a_handle= mysql_escape_string($_GET['handle']);? 他们以后会加入数据库吗?

  1. 如果是这种情况,请使用mysql_real_escape_string
  2. 否则,如果你正在寻找一个逃脱,它可能是一个html逃脱(对抗XSS攻击)。您应该至少使用htmlentities($_GET['handle'])代替

答案 2 :(得分:0)

我不确定这是否能回答你的问题,但这里有一个错误:

 <span class="activation_bold">Please activate your account to continue.</span></p>

没有首发<p>

编辑:另请参阅Damien Pirsy对另一个问题的回答。

答案 3 :(得分:0)

我不确定这是否是您唯一的问题但是:</form>'之后您错过了分号。它应该是</form>';

我还建议你像其他答案建议一样使用HEREDOC notation。对于长琴弦来说它更清洁。此外,正如其他人所说,如果您没有使用htmlentitiesurlencode(取决于HTML在文本中的位置)转义输出,那么您将面临XSS攻击。请参阅:http://en.wikipedia.org/wiki/Cross-site_scripting