PHP在echo中转义复杂的字符串

时间:2013-06-30 22:37:27

标签: php escaping echo

我是这个php + HTML5 + jquery手机的新手,尝试使用mysql连接构建一个Web应用程序。

一路上的某个地方...我使用一个php文件来“生成”一个包含3个选择框的HTML文件,用户必须选择一个月中的某一天才能继续。 我使用javascript + HTML设计了目标页面一切顺利,然后我在一个php文件中回显了整个页面(我称之为+处理某些东西以便接收页面)。 我遇到的问题是我想要转义一个字符串。 我的意思是,如果我评论这些行,页面可以工作(不是应该的,但至少会显示页面)。如果我不对它们发表评论,那么jquery会显示一条警告,上面写着“加载页面错误”

运行得很好的html是:

<html>
<head>
<title>Select</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js" />
</head>
<body>
<span id="day-select">
<select id="day">
<script type="text/javascript">
  function LastDayOfMonth(Year, Month) {
    return new Date( (new Date(Year, Month+1,1))-1 );
  }            
var nextmonth = new Date();
nextmonth.setHours(0, 0, 0, 0);
nextmonth.setMonth( nextmonth.getMonth() + 1 );
var nextziua = nextmonth.getDate();
var ultimazidt = LastDayOfMonth(nextmonth.getFullYear(), nextmonth.getMonth());
var ultimazi = ultimazidt.getDate();
var ziuaselect = nextziua;
var count = ultimazi;
var ziua=1;
while(ziua <= count){
   if(ziua == nextziua){
     document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>');
   }
   else{
     document.write('<option value="'+ziua+'">'+ziua+'</option>');
   }
ziua++;
}
</script>
</select>
</span>
<br><br>
</body>
</html>

所以,上面的html文件......工作得很好,但是当我从PHP文件中的echo中尝试它时,所有这一切都在这一行上直到地狱:

document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>');

我的意思是:

echo '  <html>';
echo '  <head>';
echo '  <title>Select</title>';
echo '  <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>';
echo '  </head>';
echo '  <body>';
echo '  <span id="day-select">';
echo '  <select id="day">';
echo '  <script type="text/javascript">';
echo '  function LastDayOfMonth(Year, Month) {';
echo '  return new Date( (new Date(Year, Month+1,1))-1 );';
echo '  }            ';
echo '  var nextmonth = new Date();';
echo '  nextmonth.setHours(0, 0, 0, 0);';
echo '  nextmonth.setMonth( nextmonth.getMonth() + 1 );';
echo '  var nextziua = nextmonth.getDate();';
echo '  var ultimazidt = LastDayOfMonth(nextmonth.getFullYear(), nextmonth.getMonth());';
echo '  var ultimazi = ultimazidt.getDate();';
echo '  var ziuaselect = nextziua;';
echo '  var count = ultimazi;';
echo '  var ziua=1;';
echo '  while(ziua <= count){';
echo '  if(ziua == nextziua){';
echo <<<EOT
document.write('<option value="'+ziua+'" selected="selected">'+ziua+'</option>');
EOT;
echo '  }';
echo '  else{';
echo <<<EOT
document.write('<option value="'+ziua+'">'+ziua+'</option>');
EOT;
echo '  }';
echo '  ziua++;';
echo '  }';
echo '  </script>';
echo '  </select>';
echo '  </span>';
echo '  <br><br>';
echo '  </body>';
echo '  </html>';

因此,此代码生成SELECT框的内容,日期编号为1-30,1-31或1-29,具体取决于月份。它也使当前的“选定”。 再一次......直接用HTML做的一切都很顺利,但当我试图回应它时......一切都停止了。因为该文件写。 我尝试转义单引号或转义双引号。结果相同。这就是我采用heredocs方法的原因。但是因为它似乎对我的问题仍然无用。 我注意了heredocs的语法: -

之后没有空格
<<<EOT
  • 最终EOT后没有空格;

  • 最后一个(EOT;)在一个新行上 但是,没有任何作用。 谁能告诉我我做错了什么? 任何帮助将不胜感激。 谢谢

2 个答案:

答案 0 :(得分:1)

我没有看到这个“逃避转义”文本的解决方案。此外,我将HTML与PHP分开(似乎是一个广为人知和推荐的做法)。所以我的代码看起来像:

<?php
 $idviz = $_POST['idvisit'];
 // other php code
?>
<html>
<head>
....
</head>
<body
 <!-- and now the html code for the page, and whenever I need parts/variables from php I just insert it in the middle of the HTML code using <?php $idviz; ?>  or other variables-->
</body>
</html>

答案 1 :(得分:0)

添加document.close();就在标签之前。