我有一个问题。我已经将一个长文本(变量类型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
标记??
提前感谢您的解释。
答案 0 :(得分:3)
因为回显字符串与评估字符串不同。
PHP生成HTML,然后由浏览器处理。但是,除非您专门通过eval()
(提示:不要!)
答案 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函数。