2012-05-28 26 views
0

我已经使用mysql_real_escape_string在数据库中输入信息,但是当我在查询中返回信息时,我在文本中得到\\\'。我已经这样做了,以便插入查询在保存之前不再停留在'处。如果它包含一个撇号,它曾经停止保存一篇文章的标题。这已被修复,但现在我得到\\\'哪里有一个撇号。PHP中的三重斜杠MYSQL结果

例子:Microsoft\\\'s $15 Windows 8 upgrade offer to run from June 2nd to January 31st, will include free workshops

我的查询代码从数据库返回一个列表如下:(注意,这是一个摘录因此不包含这个循环的结束)

<?php 

    $q2 = "SELECT * FROM ReadLater WHERE Folder_ID = 0 AND User_ID = $loggedInUser->user_id ORDER BY dt_added DESC"; 
    $r2 = mysql_query($q2); 

    echo "<div id='folderstitleright'>Unread</div>"; 

    if(mysql_num_rows($r2)>0) 
     { 
     echo "<ul id='foldersarticlelist'>"; 
     $sr2=1; 
     while($row = mysql_fetch_assoc($r2)) 

      { 

      echo " 
       <li class='box'> 

任何想法如何阻止?我已经测试过,看看是否有魔术引号,他们只是与网络主机,我没有办法将它们(我发现,这可能是一个非常复杂的方式,但我还没有找到它)和他们还说他们忽略.htaccess文件中的php标志。

我试图做一个preg_replace的\\\' to ',但迄今为止都没有成功,从我试过的,它彻底打破了查询,但我可能会执行它错误或将它放在错误的地方在上面的代码。

+2

显示如何插入数据库 – Musa

回答

1

请勿使用preg_replace与此,只需使用str_replace

$text = str_replace("\\\\\\", "'", $text); 
// Use 6 slashes as '\\' is really '\' because '\-' is an escape sequence. 
+0

我应该把上面的代码放在哪里? –

+0

这个作品,谢谢! –

+0

@TheTechBox:其他可能的转义字符组合呢?更好地使用['stripslashes'](http://www.php.net/manual/en/function.stripslashes.php)建议[我的答案](http://stackoverflow.com/a/10788941/623041 )。 – eggyal

0

要使用目前你的数据库中的数据,对返回什么用stripslashes两次

然而,这将是更好的更正一下,是在数据库中,所以没有进一步的损坏的数据被插入在未来改变你的INSERT脚本(可能涉及到移除或addslashes一个mysql_real_escape_string调用)。

0

首先,我会问你的虚拟主机禁用魔术引号,如果你签出页面http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc你可以阅读“警告这个功能已从PHP 5.3.0和从PHP 5.4.0移除REMPHED。”。

您不能在运行时禁用它,所以您的主机必须在php配置中进行更改。 如果您的主机拒绝禁用魔术引号,您可以创建一个php函数,例如“secVar()”,而不是在每个mysql查询中使用“mysql_real_escape_string”。

然后你的函数“secVar”将是:

在“魔术引号”的虚拟主机上激活的情况下:

function secVar($var){ 
    return $var; 
} 

如果“魔术引号”是虚拟主机上禁用:

function secVar($var){ 
    return mysql_real_escape_string($var) 
} 

这样做,这样使您能够快速更新脚本,您的虚拟主机提供商禁用魔术引号一天,以确保您的变量或者如果你改变主机。

你也可以用另一种方式来解决问题: 魔法引号是在你的脚本执行之前在运行时“放置”的。通过记忆,“魔术引号”被放置在以下的变量数组中:$ _REQUEST,$ _POST,$ _GET,$ _FILES或其他。 知道你可以 1.检查是否启用了魔术引号 2.如果是这样,从每个受魔术引号影响的阵列中的每个变量中去掉所有斜线。

其中一个或另一个解决方案应该为你工作。

玩得开心!