如何在echo中使用htmlspecialchars

时间:2013-02-08 17:31:57

标签: php

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

一切正常,除了我在回声中使用htmlspecialchars时遇到问题。我希望实体显示在echo而不是html字符中。我已经尝试将htmlspecialchars放在echo中,但是段落标签会显示出来。如何在echo中使用htmlspecialchar,并在段落标记中显示echo?我已经有一段时间了,并且没有在哪里,因为我对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 个答案:

答案 0 :(得分:2)

说你输入& htmlspecialchars会将其转换为&amp; &amp;&的HTML实体,因此在浏览器中查看结果会显示&

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

如果您希望&变成可见的&amp;,则浏览器需要接收&amp;amp;。应用htmlspecialchars两次来执行此操作:

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

也许The Great Escapism (Or: What You Need To Know To Work With Text Within Text)可以帮助您更好地理解这个主题。

答案 1 :(得分:1)

我不确定这意味着什么:

  
    

我希望实体显示在echo中,而不是html字符。

  

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

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

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

但我并不认为这是你正在进行的练习的目的。

答案 2 :(得分:1)

如果您想要显示实体,可以应用htmlspecialchars()两次,它会将&中的所有&amp;变为&amp;amp;,因此实体本身将会显示。

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

答案 3 :(得分:0)

尝试这种方法:

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

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

它将打印:

&lt;tag&gt;&amp;

How to prevent XSS with HTML/PHP?