我通过php脚本将html表单数据输入到postgre。我对从POST数据中获取的每个输入字符串执行以下处理:
function sanitizeString($var, $con)
{
$var = strip_tags($var);
$var = htmlentities($var);
$var = stripslashes($var);
return pg_escape_string($con, $var);
}
每当我的输入中有单引号时,它就会转换为两个单引号。我认为这可能是由于sanitizeString()函数中的stripslashes(),但即使我注释掉该行的sanitizeString(函数来自动态网站上的O' Reilly书,我可以'记得作者,是的,我知道人们讨厌这个功能)。
我看到有些人建议使用PDO对象来避免这个单引号问题(Escaping single quote and save to database with quote),但是我使用pg_特定函数来进行参数化查询,并且现在不想改变所有内容到PDO。
我有3个相关问题,从最具体到最不具体:
(1)每次访问可能包含单引号的字符串时,如何只用一个引号来存储和显示字符串比仅仅执行str_replace更优雅?
(2)我应该担心其他有缺陷的人物吗?
(3)保存在数据库中然后显示输入的html表单输入的最佳方法是什么?似乎没有灵丹妙药,但如果有最好的'我没有能够通过谷歌找到它并希望得到建议。
答案 0 :(得分:-1)
这对我有用
$var = " 'String' " ;
$new = pg_escape_string($var) ;
// outputs "String"
$new = str_replace("''", "", $new) ; // using two single quotes
// outputs String
答案 1 :(得分:-2)
在我的 PHP 应用程序中,只要文本中有单引号,就无法插入 postgres 数据库。并且文本中也多次出现单引号。所以,在插入数据库之前,我使用了
pg_escape_literal($textToBeInserted)
并解决了我的问题。单引号在应用程序中可见,但 postgres 不会抛出任何错误。