2

我在这里很新。我正在尝试制作一个允许用户发布自己的日记的博客/日记网站。我仍然很不愿意做,因为我真的很害怕恶意代码注入。

所以这里有一个示例代码:

 <?php
 $test = "<b>blah</b>"; //User input from SQL
 echo "$test";
 ?>

会出现的只是粗体字“blah”吗?我试图实现的是回显“ <b>blah</b>”。我不希望人们放置一些实际上会弄乱我的整个网页的 PHP 代码。请记住,该变量$test实际上是一个 MYSQL 查询,因此需要该变量作为示例。我知道你可以做到echo '$test';,但结果却是"$test"相反。我想把我的头发拉出来我还想不通。

我知道的第二个解决方案是htmlspecialchars();函数,但我希望字符串显示为我输入的内容,而不是转换后的字符串......

有什么办法可以做到吗?

4

4 回答 4

2

Echo 不会从字符串执行 PHP 代码。这是不可能的,这不是代码中的安全漏洞。

于 2012-12-28T15:40:32.103 回答
2

我认为 OP 希望将 HTML 本身输出到页面,而不是剥离标签。为此,您可以先运行字符串htmlentities()

$test = '<b>blah</b>';
echo htmlentities($test);

这将输出:

&lt;b&gt;blah&lt;/b&gt;

这将在页面中呈现为

<b>blah</b>
于 2012-12-28T15:28:43.710 回答
1

例如,您可以使用Twig之类的模板引擎。

于 2012-12-28T15:41:14.933 回答
0

如果htmlspecialchars();不是您要寻找的,请尝试该header()选项。

header('Content-type: text/plain');

当您要给<b>Hi</b>浏览器时,它将粗体显示,而不是返回文本。但是您可以尝试这种方式,将其输出到<textarea></textarea>.


或者另一种方法是使用htmlentities()

<?php
$test = "<b>blah</b>"; //User input from SQL
echo htmlentities("$test");
?>
于 2012-12-28T15:35:02.730 回答