PHP Magic Quotes在模板文件中添加斜杠?

时间:2012-04-09 23:12:16

标签: php magic-quotes

我有一个我用于我网站的默认网站模板,如下所示:

<!-- Meta start -->
<title></title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<!-- Meta end -->

<?php
    require_once($sidebar_inc);
?>

<?php
    // main.inc.php
    require_once($main_inc);
?>

<!-- CONTENT START -->
<?php
    // signup.tpl template location
    $tpl = 'inc/tpl/signup.tpl';
    // check if files exists and is readable
    if(file_exists($tpl) && is_readable($tpl)) {
        echo file_get_contents($tpl);
    } else {
        echo 'Template not found';
    }
?>

<!-- CONTENT FINISH -->

<?php
    // footer.inc.php
    require_once($footer_inc);
?>

现在问题是当signup.tplfile_get_contents包含在内时,如果有魔术引号,它会将"\添加到所有表单数据中。

以下是signup.tpl模板

<h1>Sign up</h1>

<p>Welcome to SITE_NAME. To get started, you’ll need an account.</p>

<form action="signup.php" method="post">
    <div class="form_settings">
        <p><span>Name</span><input class="contact" type="text" name="your_name" value="" /></p>
        <p><span>Email Address</span><input class="contact" type="text" name="your_email" value="" /></p>
        <p><span>Message</span><textarea class="contact textarea" rows="8" cols="50" name="your_enquiry"></textarea></p>
        <p style="padding-top: 15px"><span>&nbsp;</span><input class="submit" type="submit" name="contact_submitted" value="submit" /></p>
    </div>
</form>

基本上,当包含signup.tpl时,魔术引号就像这样。

enter image description here

但是当魔术引号关闭时它不会添加斜线,所以看起来应该是:

enter image description here

现在我知道你不应该使用魔术引号但我有一个函数可以在所有$_GET, $_POST, $_COOKIE, $_SESSION启用魔术引号时删除斜线,这样即使启用了魔术引号,我的脚本也能正常工作。问题是我不知道如何解决我的问题,如果魔术引号打开,它不会向signup.tpl添加斜杠。我只是想确保我的脚本能够工作,如果我将它移动到一个有魔术引号的服务器上。

我需要做些什么来阻止魔法引号向signup.tpl添加斜杠?我知道我可以关闭魔法引号,但就像我说的那样,我改变了服务器上有魔术引号并且不允许关闭魔法引号。

(忽略表单,它不是仅用作示例来显示问题的注册表单。)

1 个答案:

答案 0 :(得分:2)

有两个魔术引号设置。从手册:

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

Magic-quotes-runtiume与魔术GPC引用不同 - 魔术引号运行时发生在运行时的所有输入,而不仅仅是GET / POST / COOKIE全局变量。您需要在脚本开头禁用此设置:

set_magic_quotes_runtime(false); # pre 5.3
ini_set('magic_quotes_runtime', 0); # 5.3 onwards