PHP - 逃避“\”的大麻烦

时间:2010-10-13 16:26:25

标签: php escaping

我尝试用不完美的英语来解释我的问题:)

当我尝试将一些字符串(客户端)发送到服务器时,我看到HTML表单在某些字符之前将“\”字符添加为转义(例如使用“,”和“本身”。

但这是一个问题:如果将它保存在mysql上,在使用mysql_real_escape_string()过滤字符串之前,它会将html添加的转义字符视为“用户添加的字符”。但事实并非如此。

同样,在我检查服务器端的值并因某种原因忽略它之后,我将它们放在字段上。我需要再次逃避字符(我使用addslashes()php函数),因为如果我有$ var等于 hello“world”你怎么样,在输入字段上(就像我写的那样)它失败了。

那么,我该如何解决这个问题呢?我认为有一个解决方案:)

第2部分

现在,通过magic_quotes,我已经解决了这个问题。现在,如果参数在检查时失败,我会将其保存在var上并将其放入正确的字段中。问题是。

<script type="text/javascript">
    $(document).ready(function() {
        $("#input1").val("<?= addslashes($name) ?>");
    });
</script>       

<input class="inputReg" maxlength="20" name="name" id="input1" />

这段代码工作!!!我把价值(加入JQuery)。如果我写这个:

<input class="inputReg" maxlength="20" name="name" value="<?=addslashes($name)?>" id="input1" />

它不起作用。事实上,如果我写(例如)字符串“你好'我的'名字是marco”它每次1-2-4-8添加char \之前。为什么这个?它不起作用。任何的想法?干杯

3 个答案:

答案 0 :(得分:5)

听起来像magic quotes。确保在php.ini文件中禁用此功能:

magic_quotes_gpc = Off

答案 1 :(得分:0)

mysql_real_escape_string(stripslashes($string))

将(暂时)解决您的问题。关闭magic_quotes虽然是最好的选择。

答案 2 :(得分:0)

如果您不允许编辑php.ini,则可以使用此代码段:

# Disable magic quotes if enabled in the server settings
if (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);
}