1

PHP 在使用 fwrite 写入文件之前会自动转义我的引号。我正在尝试制作一个测试代码页。这是我的代码:

<?php
if ($_GET['test'] == 'true') {
$code = $_POST['code'];
$file = fopen('testcode.inc.php', 'w+');
fwrite($file, $code);
fclose($file);
require_once('testcode.inc.php');
}
else {
echo "
<form method='post' action='testcode.php?test=true'>
<textarea name='code' id='code'></textarea><br><br>
<button type='submit'>Test!</button><br>
</form>
";
}
?>

当我在表格中输入以下内容时:

<?php
echo 'test';
?>

它在文件中保存为:

<?php
echo \'test\';
?>

为什么 php 会自动转义我的引号?

4

4 回答 4

2

这不是fwrite,它的$_POST

有了这些知识,请在这里找到你的答案:

所以你要做的只是小修复:

if (get_magic_quotes_gpc()) {
  $code = stripslashes($_POST['code']);
}else{
  $code = $_POST['code'];
}
于 2012-05-03T23:24:52.250 回答
1

它不是 fwrite 这样做的,因为你启用了magic_quotes 。

如果你不能在你的 php.ini 文件中禁用魔术引号,那么你可以在运行时禁用它,一个简单的 PHP 将遍历你所有的输入数组并去掉不需要的斜杠,那么你就不需要担心哪个 POST/GET键剥离。禁用魔术行情

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_gpc(&$value)
    {
        $value = stripslashes($value);
    }
    array_walk_recursive($_GET, 'stripslashes_gpc');
    array_walk_recursive($_POST, 'stripslashes_gpc');
    array_walk_recursive($_COOKIE, 'stripslashes_gpc');
    array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
?>
于 2012-05-03T23:24:44.687 回答
0

您启用了魔术引号。php.ini在您的文件中禁用它们( magic_quotes_gpc=off) 或通过您$_POST['code']stripslashes.

于 2012-05-03T23:25:43.087 回答