我在创建 PHP 网络表单时的主要目标之一是确保它们安全并免受垃圾邮件发送者和自动机器人的侵害。考虑到 Akismet 每天捕获的垃圾邮件数量,无需提醒我保护表单的重要性。由于我 90% 以上的表单都是 POST 传输,所以我花了很多时间来开发 POST 调试和监听代码。
我用来跟踪 POST 提交的一个函数是我自定义的 print_r_xml() 函数。该函数采用给定数组(在我的示例中为 $_POST),循环遍历每个键,并将每个键=>值放入 XML 格式。从那里,我可以将 XML 保存到文件或将 XML 放入数据库。
该函数可用于任何数组($_SESSION 和 $_GET 也是不错的选择!)。
PHP代码
/* print the contents of a url */
function print_r_xml($arr,$wrapper = 'data',$cycle = 1)
{
//useful vars
$new_line = "\n";
//start building content
if($cycle == 1) { $output = '<?xml version="1.0" encoding="UTF-8" ?>'.$new_line; }
$output.= tabify($cycle - 1).'<'.$wrapper.'>'.$new_line;
foreach($arr as $key => $val)
{
if(!is_array($val))
{
$output.= tabify($cycle).'<'.htmlspecialchars($key).'>'.$val.'</'.htmlspecialchars($key).'>'.$new_line;
}
else
{
$output.= print_r_xml($val,$key,$cycle + 1).$new_line;
}
}
$output.= tabify($cycle - 1).'</'.$wrapper.'>';
//return the value
return $output;
}
/* tabify */
function tabify($num_tabs)
{
for($x = 1; $x <= $num_tabs; $x++) { $return.= "\t"; }
return $return;
}
请注意,当值是数组时递归使用此函数。
用法
/* test */
$_POST = array(
'first_name'=>'David',
'last_name'=>'Walsh',
'url'=>'https://davidwalsh.name',
'languages'=>array('php','javascript','java','css'),
'title'=>'Web Developer',
'favorite_blogs'=>array('CSSTricks'=>'http://css-tricks.com','AJAXian'=>'http://ajaxian.com')
);
echo print_r_xml($_POST);
结果
<?xml version="1.0" encoding="UTF-8"> <data> <first_name>David</first_name> <last_name>Walsh</last_name> <url>https://davidwalsh.name</url> <languages> <0>php</0> <1>javascript</1> <2>java</2> <3>css</3> </languages> <title>Web Developer</title> <favorite_blogs> <CSSTricks>http://css-tricks.com</CSSTricks> <AJAXian>http://ajaxian.com</AJAXian> </favorite_blogs> </data>
这个函数对调试 GET 和 POST 数据有很大帮助。试试看,让我知道您的想法!
