PHP MYSQL结果中的三次斜杠

时间:2012-05-28 18:15:12

标签: php mysql

我使用mysql_real_escape_string在数据库中输入信息但是当我在查询中返回信息时,我在文本中得到\\\'。我已经做到这一点,以便插入查询不会像以前那样在保存中'停止。如果它包含一个撇号,它过去常常会中途保存一篇文章的标题。这已经修复但现在我得到\\\'有撇号的地方。

示例: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标志。

我曾尝试做一个\\\' to '的preg_replace,但到目前为止还没有成功,从我试过的它完全打破了查询但是我可能错误地执行它或者把它放错了放在上面的代码中。

3 个答案:

答案 0 :(得分:1)

请勿使用preg_replace,只需使用str_replace

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

答案 1 :(得分:0)

要使用当前数据库中的数据,请在返回的内容上使用stripslashes 两次

但是,最好更正数据库中的内容并更改INSERT脚本,以便将来不会插入更多损坏的数据(可能涉及删除对addslashes的调用或mysql_real_escape_string)。

答案 2 :(得分:0)

首先,我会要求您的网站主机禁用魔术引号,如果您查看页面http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc,您可以阅读“警告此功能自PHP 5.3.0起已被弃用,自PHP 5.4.0起已被删除。”

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

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

如果在网络主机上激活了“魔术引号”:

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

如果在网络主机上禁用了“魔术引号”:

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

通过这种方式,您可以快速更新脚本,以便在您的webhost禁用魔法引号或更改主机时保护变量。

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

一个或另一个解决方案应该适合你。

玩得开心!