每次我base64_encode();我的数据库中的新数据,它包含撇号('),当我base64_decode它时,我的文本就像这样:
原文:嗨! 哪里每个人?
加密后:嗨! 哪里每个人?
如何使用PHP停止此操作?
答案 0 :(得分:1)
我认为这与magic_quotes
正在进行。
我是否正确地假设您base64_encode
数据来自表单并将其保存到数据库中?
如果是这样,请定义并使用此功能处理来自$_GET
,$_POST
或$_COOKIE
的任何内容:
function escape_gpc($var) {
return get_magic_quotes_gpc() ? stripslashes($var) : $var;
}
if (isset($_POST['form_sent'])) {
$somedata = escape_gpc($_POST['somedata']);
// and then you base64_encode it and insert into the database.
}
答案 1 :(得分:1)
摆脱base64编码,你会没事的
插入前不要编码。
检索时不要解码。
就是这样。
看,你的情况很清楚。
首先,您通过在多个字符中添加反斜杠来转义数据
对于包含在引号中的查询中的字符串来说,这已经足够了。不需要更多编码!
这些反斜杠应该关闭然后插入数据,因此,您可以在数据库中保持数据不变。
接下来,您正在对字符串进行编码,密封斜杠!
然后,在解码后,您的数据中会出现反斜杠。
所以,你只需摆脱base64,一切都会好起来的!
答案 2 :(得分:0)
您可以在解码输出上使用stripslashes()
,但要确保在插入数据库之前将其正确转义。你用PHP编码和解码吗?
答案 3 :(得分:0)
如果你没有使用一些转义函数(我想是mysql_real_escape_string,但是仅仅是统计数据,你没有提到你是否使用了DB而不是其他语句或准备好的语句),你可能有magic_quotes_gpc指令在php.ini中,所以在将数据插入数据库之前会自动添加转义反斜杠。 因此,在检索记录时,您将获得反斜杠。编码/解码正是它应该是的:编码和解码字符串。
使用$decoded = stripslashes(base_64decode($your_datas_from_db));