使用addcslashes来转义PHP中的反斜杠?

时间:2017-06-30 12:47:30

标签: php escaping backslash

我正在尝试使用addcslashes\中的每个\前面添加另一个string

为什么这不起作用?

// $string is `\` from user input
$string = addcslashes($string, '\\');
// I apply $string2 = preg_replace('/ /', $string, '/ /');
// $string2 is `\` instead of `\\`

这不起作用$string = addcslashes($string, '\\\\')

LE 之后我将字符串保存到文件中:

 $pattern = "/db_name = .*;/";
 $newpat = 'db_name = '. export_var($_POST['db_name']) .';';
 $contents = preg_replace($pattern, $newpat, $contents);

3 个答案:

答案 0 :(得分:1)

  

用户输入将写入PHP文件

如果您想获得值的有效文字表示,请使用var_export,不要尝试手动控制斜杠:

echo '$foo = ', var_export($userInput, true), ';';

答案 1 :(得分:0)

这可能会对你有帮助。

//$string =  'this is my first slash `\` and this is second `\`';

echo $string = str_replace('`\`','`\\\\`',$string);

//output: this is my first slash `\\` and this is second `\\`

它给了我想要的输出。

答案 2 :(得分:0)

好的,问题实际上是preg_replace来电,用\\取代\

要解决此问题,我可以在preg_replace中使用字符串之前将其转义。

function sanitizeStr($string) {
    // We have to double each backslash as preg_replace de-doubles it.
    $string = str_replace("\\", "\\\\", $string);
    return var_export($string, true);
}
$string = sanitizeStr($string);
$contents = preg_replace($pattern, $string, $contents);

在替换之后,$contents将如何完全包含$string用户输入的内容,但可以安全地在PHP文件中输出它。

感谢@deceze提及var_export