-1

您可以访问此链接以获取我的问题示例:http: //jflagher.mystudentsite.net/cmweb241/cmweb241_lab2.html

一切正常,除了我在回声中使用 htmlspecialchars 时遇到问题。我希望实体出现在 echo 而不是 html 字符中。我尝试将 htmlspecialchars 放在 echo 中,但随后出现了段落标签。如何在回声中使用 htmlspecialchar,并在段落标签中显示回声?我在这方面已经有一段时间了,因为我对 PHP 很陌生。

例如,当我输入“&”时,我会得到回显。我希望实体 & 得到回显,而不是“&”。

 <?php
  $username = htmlspecialchars(str_replace(array("'", "\""), "", $_POST['username']));
  $password = htmlspecialchars(str_replace(array("'", "\""), "", $_POST['password']));
  $comment = htmlspecialchars(str_replace(array("'", "\""), "", $_POST['comment']));

  echo  "<p> Your Username is: $username .</p> ";
  echo " <p>Your Password is: $password . </p>";
  echo " <p>Your Comment was: $comment . </p>";

 ?>
4

4 回答 4

2

说你进入&
htmlspecialchars会把它变成&amp;.
&amp;是 的 HTML 实体&,因此在浏览器中查看结果会显示&.

这是 的正常目的htmlspecialchars,它通过适当地将其转义为媒体 (HTML) 来保留可见字符

如果要&变成可见&amp;的,浏览器就需要接收&amp;amp;。应用htmlspecialchars两次来做到这一点:

htmlspecialchars(htmlspecialchars($_POST['username']))

也许伟大的逃避现实(或:使用文本中的文本需要知道的内容)可以帮助您更好地理解主题。

于 2013-02-08T17:43:53.343 回答
1

我不确定这意味着什么:

我希望实体出现在 echo 而不是 html 字符中。

您是说您希望实体显示在您的网页中吗?htmlspecialchars将字符转换实体,但浏览器会将这些实体显示为它们所代表的字符。

如果您想在浏览器中实际查看实体,可以对这些值进行双重转义:

$username = htmlspecialchars(htmlspecialchars(str_replace(array("'", "\""), "", 
                             $_POST['username'])));

但我真的不认为这是你做练习的目的。

于 2013-02-08T17:38:52.650 回答
1

如果你想显示实体,你可以申请htmlspecialchars()两次,它将全部转入&,从而显示实体本身。&amp;&amp;amp;

另一种方法是将输出包装在<pre></pre>标签中。

于 2013-02-08T17:40:14.543 回答
0

试试这个方法:

<?php
$string = "<tag>&";

$string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
print $string;

它将打印:

&lt;tag&gt;&amp;

如何使用 HTML/PHP 防止 XSS?

于 2013-02-08T17:46:03.340 回答