我正在尝试使用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);
答案 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
。