Php base64_编码撇号

Php base64_编码撇号,php,mysql,base64,Php,Mysql,Base64,每次我使用base64_encode();我的数据库中的新数据包含撇号('),当我对其进行base64_解码时,我的文本显示如下: 原文:嗨每个人都在哪里 加密后:嗨每个人在哪里 如何使用PHP停止此操作?您可以在解码的输出上使用stripslashes(),但请确保在将其插入数据库之前正确转义。您是否同时使用PHP对其进行编码和解码?如果您没有使用某种转义函数(我假设mysql\u real\u escape\u string,但只是出于统计,您没有提到您是否在其他语句或准备好的语句上使用DB

每次我使用base64_encode();我的数据库中的新数据包含撇号('),当我对其进行base64_解码时,我的文本显示如下:

原文:嗨每个人都在哪里

加密后:嗨每个人在哪里


如何使用PHP停止此操作?

您可以在解码的输出上使用
stripslashes()
,但请确保在将其插入数据库之前正确转义。您是否同时使用PHP对其进行编码和解码?

如果您没有使用某种转义函数(我假设mysql\u real\u escape\u string,但只是出于统计,您没有提到您是否在其他语句或准备好的语句上使用DB),那么您很可能在PHP.ini中启用了magic\u quotes\gpc指令,因此,在将数据插入数据库之前,会自动添加转义反斜杠。 因此,在检索记录时,将使用反斜杠。编码/解码就是它的本意:对字符串进行编码和解码


使用
$decoded=stripslashes(base_64decode($your_datas_from_db))

我认为这与
magic\u quotes
的启用有关

假设您对来自表单的数据进行
base64\u编码并将其保存到数据库中,对吗

如果是,请定义并使用此函数处理来自
$\u GET
$\u POST
$\u 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.
}

只要去掉base64编码,你就会没事的。
插入前不要编码。
检索时不要解码

就这些

听着,你的案子都清楚了

  • 首先,通过在几个字符中添加反斜杠来转义数据。
    这就足够了,字符串用引号括在查询中。再也不需要编码了
    这些反斜杠应该会消失,然后数据被插入,所以,您的数据在数据库中不会被触及

  • 接下来,您将对字符串进行编码,在其中密封斜杠
    然后,在解码后,数据中有一个反斜杠


所以,你只要摆脱base64,一切马上就会好起来

在解码前应用stripslashes()?这不是加密,而是方式。我认为base64不会这么做。你能发布你的密码吗?@Tim Cooper这是一种加密技术。@yanike不,这是一种编码技术谢谢你对它进行了编码和解码。避免头痛。谢谢大家的帮助。我会记下以备将来使用。@yanike不,你选错词了。没有什么是可以避免的,而是增加了。你们总是治标不治本。出口时如何把这个“';”变成“'”。不。那很不安全。这就是我为什么要编码的原因。@yanike听着,朋友。这个网站上有成千上万的程序员。他们中没有人在做base64编码。因为它不增加安全性,只增加头痛。你正在逃逸你的数据-这就够了。@yanike:真的。我想知道原因是什么。参数化查询和mysql\u real\u escape\u string
的存在是有原因的。@yanike-Col.弹片是正确的。base64编码有它的用途,但您使用它的目的并不是其中之一。至少应该使用相反的方式。在base64编码的数据上使用stripslashes没有任何意义。使用base64毫无意义。@Shrapnel上校同意这一点,但由于我不知道OP为什么要对字符串进行编码(至少在回答时是这样),我认为最好是告诉他代码中的错误以及如何从那里纠正错误,而不是将他所有的代码重写到我认为最好的程度。我看了你们最近反对这种回答的战争,我必须说你们说得有道理;我喜欢这首歌“你治标不治本”的座右铭,我一定会把它铭记在心,以备将来之用,谢谢曼坦克斯的支持。但是,你至少必须逆转基本解码和条带斜杠的使用,否则你将不会得到想要的效果。尽管如此,我强烈建议你在发现魔法引号已启用时禁用它们。它们造成了相当多的问题。我怀疑这不是神奇的引语。最有可能的是OP只是手动转义他的数据,因为它是“安全的”。