初学者的好奇心

时间:2012-02-05 18:33:59

标签: php mysql

我有一个问题。我已经将一个长文本(变量类型LONGTEXT)放入MYSQL数据库 - 通过命令行。在本文的某处有一个<br>标记,在文本末尾附近有<?php phpinfo(); ?>。如果我输入SELECT * FROM mytable WHERE id=1,则整个文本显示为原样,因此它不会改变(读取:<br><?php phpinfo(); ?>都在那里。但是当我通过php提交查询时:< / p>

if (mysql_num_rows($result) > 0) {
  while($row = mysql_fetch_row($result)) {
    echo $row[1];
  }
}

然后在我的网页上显示完全符合我想要的文本,这意味着浏览器将<br>标记作为换行符处理,并且<?php phpinfo(); ?>部分是忽略不计的。这实际上就是我想要的。但我的问题是:为什么<?php phpinfo(); ?>部分不能通过浏览器处理? PHP的echo函数是否忽略<?php标记??

提前感谢您的解释。

3 个答案:

答案 0 :(得分:3)

因为回显字符串与评估字符串不同。

PHP生成HTML,然后由浏览器处理。但是,除非您专门通过eval()(提示:不要!)

,否则不会评估包含PHP代码的字符串。

答案 1 :(得分:3)

浏览器不处理PHP。这是一种服务器端技术。

您的PHP正在从数据库中读取一些文本并将其输出到浏览器。文本包含字符串<?php并不重要,它是从PHP程序输出的,而不是脚本的一部分。

当浏览器解析它时,它看起来只是无效的HTML,它会尝试执行错误恢复(或多或少地将其忽略为无法识别的标记)。

答案 2 :(得分:0)

在新的空浏览器窗口中尝试:

javascript:document.write('<b>hello <?php ?> is here!</b>');

然后打开萤火虫/检查员。 在safari中,<?php ?>似乎被解释为/转换为注释。

PHP回应你扔给它的任何东西。如果要执行longtext,请使用eval,如果要正确显示它,可以使用http://php.net/manual/en/function.htmlentities.php函数。