使用WordPress转义URL中的日期字符串

时间:2012-12-17 作者:yoxalld

我正在创建一个Wordpress页面,该页面根据通过\\u GET变量设置的日期变量搜索帖子。我想确保我以尽可能最好的方式完成了这项工作,并且正确地清理了输入,我还没有对php进行过太多清理。这是我的代码,它运行正常。我需要的变量格式是“2012年12月17日星期一”,我还需要做更多的工作来清理GET变量吗?如果我需要进一步解释,请告诉我。提前感谢!

if ( isset ( $_GET[\'new_date\'] ) ) {
$display_date =$_GET[\'new_date\'];
} else {
$display_date = date( \'l F j Y\');
}

$next_date = date(\'l F j Y\', strtotime(\'+1 Day\', strtotime($display_date) ) ) ;
$prev_date = date(\'l F j Y\', strtotime(\'-1 Day\', strtotime($display_date) ) ) ;
?>
<div class="large-date">
<h1><?php echo $display_date ; ?></h1>
<a class="prev-day" href="<?php echo $_SERVER[\'PHP_SELF\'] . \'?new_date=\' . urlencode($prev_date);?>"><?php echo $prev_date; ?></a>
<a class="next-day" href="<?php echo $_SERVER[\'PHP_SELF\'] . \'?new_date=\' . urlencode($next_date);?>"><?php echo $next_date; ?></a>

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

strtotime 如果您提供奇怪的信息,将返回false。

echo strtotime(\'<script>\'); // bool(false)
然而,如果你做了你正在做的事情并且嵌套了两个语句,你可能不会得到你所期望的。

echo strtotime(\'+1 day\',strtotime(\'<script>\')); // int(86400) 
以及date 如果给定奇怪的数据,则返回宇宙的开始,即创建之日(1970年1月1日)。

echo date(\'1 F j Y\',strtotime(\'+1 day\',strtotime(\'<script>\')));
所以,我不认为你真的有消毒问题,但它可能不会按你想要的方式工作。

也就是说,为了以防万一,我会去掉不应该在日期字符串中的每个字符。大概

$display_date = preg_replace(\'/[^A-Za-z0-9+]*/\',\'\',$display_date); // assuming that you are encoding the spaces with a "+"
这将在很大程度上削弱注射的效果,但不会给你合理的日期。

我看不到你在向DB发送任何信息。您不应该对页面输出进行清理(虽然清理输出很好),并期望它一直持续到表单处理或链接被单击时。您应该在查询运行之前对此进行清理(并使用prepare) 但我根本看不到这部分代码。

结束

相关推荐

Embedded Feed Update

我正在尝试在我的网站上嵌入一个提要。我使用的插件名为Hungry Feed。我已经将feed正确嵌入,除了一件事之外,所有的东西似乎都在工作。订阅源更新。。。嵌入式提要应该多久更新一次?当我将短代码放入模板中时,提要似乎停留在提要可用的文章上。嵌入提要的页面为http://www.ragequitbaddie.com/news我使用的提要url是:http://www.joystiq.com/editor/jessica-conditt/rss.xml如果你知道另一种嵌入提要的插件方式,它可以让我获得提要