我已经完成了删除未定义变量和未定义索引错误的任务,我知道如何
$value = isset($_POST['value']) ? $_POST['value'] : '';
问题是这太费时间了,我预测超过2000个变量,$ _GET,$ _POST尚未设置。那么有一个正则表达式可以用来快速设置这些变量吗?
如何使用正则表达式将此$category = $_GET['c']
更改为此
$category = isset($_GET['c']) ? $_GET['c'] : ''
?
我如何使用正则表达式将if($page or $category or $profile)
更改为此
if(isset($page) or isset($category) or isset($profile))
?
这是我能想到的最好的方法,使用正则表达式查找&在Notepad ++中替换。我假设超过2000 PHP变量/索引未定义错误。如何在不关闭错误的情况下解决这个问题?
答案 0 :(得分:1)
你不应该使用正则表达式,因为它有点沉重:) 如果我正确理解你的问题,你可以这样做, 使用这种方法,无论有多少参数包含POST或GET,您只需通过foreach循环过滤它们并获取带参数的干净数组,也可以使它成为返回数组的函数。然后您只需要检查{{ 1}}并做你的事。
if_array_key_exests()
没有功能
$_POST = ["user"=>"1", "num"=>2];
$_GET = ["user" => '', "num"=>1];
//function method
function filter($array)
{
$arr = array();
foreach ($array as $key => $val) {
if (!empty($val)) {
$arr[$key] = $val;
}
}
return $arr;
}
答案 1 :(得分:0)
对于您的第一个问题,请替换
之类的内容(\$\w+)\s*=\s*\$_GET\[['"]?(\w+)['"]?\]\s*;
通过
$1 = isset($_GET['$2']) ? $_GET['$2'] : '';
应该有用。
关于第二个问题,我不知道是否可以使用可变数量的变量。这个适用于3个变量,替换
if\s*\(\s*\s*(\$\w+)\s+or\s+(\$\w+)\s+or\s+(\$\w+)\s*\)
通过
if (isset($1) or isset($2) or isset($3))
您可以在搜索中的最后一个\s+or\s+(\$\w+)
之前添加另一个\s*
,并在替换4个变量等中添加另一个or isset($4)
。
我建议您逐个更换它们,而不是一次更换所有; - )
另请注意,if ($a)
与if (isset($a))
不同。考虑这样的事情:
// query string is a=0
$a = $_GET['a'];
if ($a) // will be false
if (isset($a)) // will be true
if (!empty($a)) // will be false
因此,您可能希望使用!empty()
代替isset()
。这也应该没有通知。
答案 2 :(得分:0)
resove first issue:
define a function like:
function global_get($key){
return isset($_GET[$key])?$_GET[$key]:'';
}
then use sed(linux tool) to replace all parts like this(it will modify all the $_GET[.*] of php extension files in your project,so be careful to use this):
find /yourproject -name "*.php" -exec sed -i "s/\$_GET\[\([^]]*\)\]/global_get(\1)/" \;
you may modify this command to apply your own demand.
The second issue could be harmful if you use the regex expression because it is hard to make a role rule.so I recommend you to replace manually.