题
我有一点麻烦让一个粘粘的形式,将记得什么是输入上的形式提交,如果价值有双引号。问题是,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 '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'
您还可以在$ myValue上执行strip_tags以删除html和php标记。
这是我的使用:
htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
ENT_QUOTES
告诉PHP转换成两个单一和双引号,我找到希望的。ENT_SUBSTITUTE
和ENT_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
文件。
不隶属于 StackOverflow