我有一个用户并输入文字的网站。用户输入了一些东西&#34;我使用#3&amp;#4阀门&#34;进入<input>
。该文本存储在数据库中,并显示在其他地方的屏幕上。我的问题是&#34;&amp;#4&#34;被解释为HTML实体或特殊字符,我希望它按字面解释。
我是否需要使用Javascript从&
转义<input>
?我希望<pre>
可以工作,但它也将文本解释为代码。同样,这是用户输入的文本。
例如,当我运行下面的代码时,<input>
会显示与<p>
不同的文字。我希望<p>
能够准确显示<input>
显示的内容。
<html>
<body>
<input id="box">
<p id="para"></p>
</body>
<script>
document.getElementById("box").value = "something #3";
document.getElementById("para").innerHTML = "something #3";
</script>
</html>
修改
我意识到我需要客户端解决方案和服务器端解决方案。在一个显示用户输入文本的地方,我使用的是Javascript&#39; .innerHTML
,而在另一个网页上,我用PHP echo
来使用它。
答案 0 :(得分:1)
<强> Working fiddle 强>
尝试使用以下方法之一( innerText
或 textContent
)将内容附加为文本而不是HTML,例如:< / p>
document.getElementById("para").innerText = "something #3";
document.getElementById("para").textContent = "something #3";
注意:如果是服务器端显示,您可以使用htmlentities($content)
。
希望这有帮助。
document.getElementById("para").textContent = "something #3";
<p id="para"></p>
答案 1 :(得分:1)
我认为你真正的问题是缺乏服务器端过滤。鉴于您遇到了这个问题,我似乎很可能根本不进行任何服务器端输入过滤/清理,这意味着您也容易受到XSS <的攻击/ p>
在服务器端,您应该清理返回给客户端的所有内容,其中包括剥离HTML标记(如果人们尝试发送HTML标记,还会在保存时返回错误)以及替换html特殊字符(见htmlspecialchars
)。后者会将您的&
转换为&
,这将产生您想要的最终结果:您的HTML不会被解释为HTML特殊字符。
使用javascript客户端修复此问题的一个问题是,您不仅需要在任何地方进行此操作,而且如果有相同输出显示在其中的情况下,您还必须记住以不同的方式执行此操作。 HTML文档本身,即不通过javascript显示。
简而言之,在用户数据返回浏览器之前建立一个连贯(彻底)的方法来清理用户数据将解决您的问题并提供第一层保护,防止大量恶意攻击。
答案 2 :(得分:0)
您需要停止将其作为HTML进行操作,因为如果您明确地执行此操作,文本将成为代码。在您的示例的略微修改版本中,请比较:
Array
(
[0] => 1x
[1] => 1x
[2] => 2x
)
&#13;
var txt = "one <strong>two</strong>";
document.getElementById("box").value = txt;
document.getElementById("para1").innerHTML = txt;
document.getElementById("para2").innerText = txt;
&#13;
(在<input id="box">
<p id="para1"></p>
<p id="para2"></p>
的情况下,只有一个选项,因为该元素首先不能包含HTML。)
答案 3 :(得分:0)
使用Copy (Select * From form_submissions) To 'path/to/whatever' With CSV DELIMITER ',';
代替innerText
。
答案 4 :(得分:-2)
要显示&amp;,您可以替换所有&amp;使用&amp; amp,这样你就会看到#3&amp;#4和'&amp;#4'不会被解释。