我发布了一些带有特殊字符的输入。 以下是我尝试插入db:
的一些输入示例<input type='text' name='address' value ='P. 34/1 Ap. 4/4 Rome, "xxx" street'>
<input type='text' name='detail' value ='VAT Reg. No'>
我在db中输入了这些输入:
htmlspecialchars($_POST['address']);
htmlspecialchars($_POST['detail']);
$db->sql_query(
"INSERT INTO company SET
option_type=1,
option_name='". htmlspecialchars($address)."',
option_value='". htmlspecialchars($detail)."'"
);
我检索了记录:
<input type="text" value="htmlspecialchars_decode($rows['address'])">
<input type="text" value="htmlspecialchars_decode($rows['detail'])">
这是好的,直到现在,值正确插入如下:
地址:P. 34/1 Ap. 4/4 Rome, quot;xxxquot; street
详细信息:VAT Reg. No
但问题是当我从数据库中读取它们时,它什么都没显示。我尝试使用htmlspecialchars_decode
和htmlentities()
,但我没有正确显示所有字符。
当我使用htmlspecialchars_decode()显示值时,根本不显示detail
值,地址就可以了。
拜托,有人可以帮助我吗?
答案 0 :(得分:1)
您实际上不需要转换特殊字符来将字符串插入数据库。你需要使用像real_escape_string这样的东西来逃避它。
你应该只在输出上使用htmlspecialchars等。
答案 1 :(得分:0)
我希望你使用的是mysqli,而不是mysql。你应该看看prepared statements,这应该可以节省大量的麻烦,并关闭更多潜在的安全漏洞。正如euantorano所说,没有必要逃避弦乐。作为建议,将O'Reilly添加到您的测试用例中 - 当它保存得很好时,您就会接近;)