尽管使用了striplashes,但在显示的表单文本中仍会出现斜杠

时间:2014-01-10 07:41:19

标签: php mysql stripslashes

我已经建立并运行了一个评论框,我注意到当我使用'时,它会在它前面创建一个\。例如,如果我写“如何”它会在数据库中显示为“如何”,它会在页面上显示。当我显示“body”文本时,我正在使用stripslashes函数,我认为该文本应该摆脱斜线。

我的服务器运行的是php版本5.3.6,如果有帮助的话。

我正在使用这段代码将评论框正文中的文字发布到我的数据库中:

$body = mysql_prep($_POST['body']);

它正在使用的功能是:

function mysql_prep($string) {
    global $connection;

    $escaped_string = mysqli_real_escape_string($connection, $string);
    return $escaped_string;
}

旁注:你不需要回答这个问题,但这是我用来使文本用户安全地从黑客,坏人和所有这些中进入的功能。我这样做是好还是我让自己对问题持开放态度? (除了这个可能因为这个功能而出现的斜线问题)

这是我用来显示文字的代码:

<div id="comments">
    <?php while($comment_text = mysqli_fetch_assoc($display_comments)) { ?>
    <div class="comment" style="margin-bottom: 2em;">
        <div class="author">
            <b><?php echo htmlentities($comment_text["author"]); ?>:</b>
        </div>
        <div class="meta-info" style="font-size: 0.8em;">
            <?php echo datetime_to_text($comment_text["created"]); ?>
        </div>
        <div class="body">
            <?php echo stripslashes($comment_text["body"], '<strong><em><p>'); ?>
        </div>
    </div>
    <?php } ?>  
    <?php if(empty($display_comments)) { echo "No Comments."; } ?>
</div>

非常感谢任何帮助或建议,谢谢!!

1 个答案:

答案 0 :(得分:0)

您的问题是,您已Magic Quotes已开启。您可以使用此方法以递归方式去除所有斜杠:

档案magic_quotes_filter.php

<?php

if (function_exists('set_magic_quotes_runtime') && get_magic_quotes_gpc()) {

    function stripslashes_deep($value) {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);  
}

然后你可以简单include('path/to/magic_quotes_filter.php')处理请求HTTP变量。

在您的情况下,只需将其包含在脚本的顶部即可。