[英]preg_replace with variable input
我对此很陌生,并且从我发现的另一篇文章中借用了一些代码,我不知道我想做的是正确的还是最好的方法,这就是我如何“使”它工作..
这是代码
<?php
$yn = $_POST['YN'];
echo $yn;
$fl='config.php';
/*read operation ->*/ $tmp = fopen($fl, "r"); $content=fread($tmp,filesize($fl)); fclose($tmp);
// here goes your update
$content = preg_replace('/\$yourname = \"(.*?)\";/', '$yourname = ""$YN"";', $content);
/*write operation ->*/ $tmp =fopen($fl, "w"); fwrite($tmp, $content); fclose($tmp);
?>
我正在尝试更新一个与$ yourname与POST结果匹配的配置文件条目,我可以回显$ yn并且它包含正确的值,但是我无法使该变量在regex替换中起作用,
$content = preg_replace('/\$yourname = \"(.*?)\";/', '$yourname = ""$yn"";', $content);
因此,如果$ yn = karl,则我尝试将文件中的$ yourname =“”更新为$ yourname =“ karl”
但我无法使其正常工作,我得到的最接近的结果是使用变量作为文本来更新文件,即$ yourname =“ $ yn”。
希望有人可以帮助
使用您发布的内容,我设法使其正常运行,非常感谢:)
$content = preg_replace( '/\$yourname = \"(.*?)\";/', '$yourname = "'.$yn.'";', $content);
我建议使用这样的模式
preg_replace( '/'.preg_quote( $yourname ).'\s*=\s*\"[^\"]+\";/', $yourname.'="'.$yn.'";', $content);
..'\\ s * = \\ s * \\“([[^ \\”] +)\\“;
在这种情况下(因为它使用双引号),最好使用串联并避免转义的麻烦。 当简单将赢得胜利时,不必fancy
。
同样要警惕像这样的错误:php变量名中的$yn
vs $YN
区分大小写,如果不了解这些信息,查找错误可能是一个重大挑战,因为对我们人类而言,它看起来是一样的。 当然,文件名,类名,函数和方法不区分大小写(在Windows上)并没有帮助。 真的不确定类和方法的名称在Linux上是否区分大小写,因此我尝试避免该问题并始终使用相同的大小写。
看起来OP可能想要$yourname
(按字面意思),我更新了regx
preg_replace( '/\$yourname\s*=\s*\"[^\"]+\";/', '$yourname="'.$yn.'";', $content);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.