-2

我发布了一些带有特殊字符的输入。这是我试图插入数据库的一些输入示例:

<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_decodehtmlentities()但没有正确显示所有字符。

当我使用 htmlspecialchars_decode() 显示值时,只有detail值根本不显示,地址没问题。

请问,有人可以帮我吗?

4

2 回答 2

1

您实际上不需要转换特殊字符即可将这些字符串插入数据库。不过,您需要使用 real_escape_string 之类的东西来逃避它。

您应该只在输出中真正使用 htmlspecialchars 等。

于 2013-07-18T13:33:08.213 回答
0

我希望您使用的是mysqli,而不是 mysql 。而且您绝对应该查看准备好的语句,这应该可以避免很多麻烦并关闭更多潜在的安全漏洞。正如euantorano所说,没有必要逃避字符串。作为建议,将 O'Reilly 添加到您的测试用例中 - 当保存良好时,您就接近了;)

于 2013-07-18T17:04:06.073 回答