我有一点麻烦让一个粘粘的形式,将记得什么是输入上的形式提交,如果价值有双引号。问题是,HTML是应该读喜欢的东西:

<input type="text" name="something" value="Whatever value you entered" />

然而,如果这句话:"我怎么做这个吗?"是在报价,得到的是类似的:

<input type="text" this?="" do="" i="" how="" value="" name="something"/>

我怎么会有过滤器的双引号?我已经试过了魔法的报价和关闭,我用stripslashes和addslashes,但到目前为止,我还没遇到合适的解决方案。什么是最好的办法来解决这个问题PHP?

有帮助吗?

解决方案

您需要 htmlentities()

<input type="text" value="<?php echo htmlentities($myValue); ?>">

其他提示

以上将编码具有html实体代码的各种字符。我更喜欢使用:

htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');

这只会编码:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

您还可以在$ myValue上执行strip_tags以删除html和php标记。

这是我的使用:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
  • ENT_QUOTES 告诉PHP转换成两个单一和双引号,我找到希望的。
  • ENT_SUBSTITUTEENT_DISALLOWED 处理无效Unicode。他们相当类似的-我理解,第一替代品无效的代码单位序列,即 无效或序列编码的字符,并不代表人物, ,而第二代无效的代码分给出的文件类型,即 这是不允许使用的文件类型,指定 (或默认,如果没有明确规定)。的 文档 是的不希望简洁。
  • ENT_HTML5 是的文件类型我的使用。你可以使用一个不同,但它应该与你页doctype.
  • UTF-8 是的编码我的文件。我建议,除非是绝对肯定你使用PHP5.4.0,你明确的指定编码,尤其是如果您可以处理非英文的文本。主机,我做了一些工作上使用5.2.什么,默认为 ISO-8859-1 和产生的胡言乱语。

作为 thesmart 所建议的, htmlspecialchars 编码只保留HTML人物的话, htmlentities 将一切有HTML表示。在大多数情况下要么将做的工作。 在这里, 是一个对该问题的讨论。

有一件事:这是一个最佳做法,以保持魔术的报价残疾人,因为他们得到一种虚假的安全感和被弃用5.3.0和从中删除5.4.0.如果他们被启用,每一个报价,在你的领域将附加一个反斜杠上回发(和多回发会添加更多的和更多的斜线).我看到运是能够改变的设置,但是对于未来参考文献:如果你是一个共享的主人或否则没有访问 php.ini, 最简单的方法是增加

php_flag magic_quotes_gpc Off

来的 .htaccess 文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top