为什么不能只将php转换为mysql的html实体?

net*_*rox 3 html php magic-quotes html-entities

PHP在默认情况下使用"魔术引号",但它已经有很多瑕疵.我知道它将在下一个主要版本的PHP中禁用它.

虽然反对它的论据是有道理的,但我不明白为什么不只是使用HTML实体来代表引号而不是剥离和删除斜杠?毕竟,VAST的大部分mySQL用于输出到Web浏览器?

例如,' 用来代替',它根本不会影响数据库.

另一个问题,为什么PHP只能为每个版本的PHP设置配置<?php4或<?php5,以便为这些版本加载适当的解释器?

只是好奇.:)

Bil*_*win 9

&#039;成字符串列的数据库就可以了,如果你使用的数据库内容被输出到网页.但事实并非如此.

最好在输出时转义输出.这是您唯一确定输出转到网页的时间 - 而不是日志文件,电子邮件或其他目的地.

PS:PHP已经在标准的php.ini文件中默认关闭魔术引号.它已在PHP 5.3中弃用,并且将在PHP 6.0中完全从语言中删除.


zom*_*bat 5

这里有一个很好的理由,大多是为了应对自己发布的答案:使用htmlspecialchars()htmlentities() 使您的SQL查询的安全.这就是mysql_real_escape_string()的用途.

您似乎在假设它只是单引号和双引号字符造成问题.MySQL的查询实际上是脆弱的\x00,\n,\r,\,',"\x1a字符数据.如果您没有使用预准备语句mysql_real_escape_string(),那么您有一个SQL注入漏洞.

htmlspecialchars()并且htmlentities()不要转换所有这些字符,因此使用这些函数无法使查询安全.为此,addslashes()也不会使您的查询安全!

其他较小的缺点包括其他海报已经提到的关于MySQL并不总是用于网页内容的事情,以及你增加数据所需的存储量和索引空间这一事实(考虑一个字节的存储空间用于报价)字符,相对于其实体形式的六个或更多字节的存储空间).