在函数参数中传递多个反斜杠不起作用

时间:2018-02-23 16:17:50

标签: php parameter-passing backslash

这个

echo date('g:iA \o\n D, M jS', strtotime('2018-02-23 07:42:22'));

回应这个

7:42AM on Fri, Feb 23rd

但是这个

function dateformat($source, $format = "Y-m-d")
{
    if(empty($source) || $source == '0000-00-00') return false;
    $date = date($format, strtotime($source));
    if(date('Y', strtotime($date)) == '1969' && strpos($source, '1969') === false) return false;
    if(date('Y', strtotime($date)) == '1970' && strpos($source, '1970') === false) return false;
    return $date;
}
echo dateformat('2018-02-23 07:42:22', 'g:iA \o\n D, M jS');

回应这个

虽然这个

echo dateformat('2018-02-23 07:42:22', "g:iA \o\n D, M jS");

回应这个

7:42AM o Fri, Feb 23rd

换句话说,使用单引号,我得到false的返回值。使用双引号,函数参数正确传递\o,但不传递\n

各种不同的测试都会产生不可预测的结果。我认为这与保留\n有关,所以我尝试\o\o进行测试。返回false,而\o\n成功通过\o

我这种方式多年来一直在使用这个功能,刚才注意到了这个问题,所以我想也许这可能与我最近从Dreamweaver切换到Visual Studio Code有关,但是我将这些测试结果转移到PHP Sandbox并得到相同的结果,因此它不是代码编辑器问题。

如果没有解决方案(这是我的首选),是否至少有一个解释是什么导致了这种行为?

UPDATE :总结一个主要问题,我不能将多个反斜杠字符传递给函数的参数。如果我这样做,它将返回false。但是我想做的任何事情都可以在原生的php日期函数中正常工作。

1 个答案:

答案 0 :(得分:2)

对于单引号字符串,转义字符为文字\o\n而且返回false,您的函数也是如此:

$date = date($format, strtotime($source));

对于双引号字符串,字符会被转义,但\n换行符的转义序列,因此您获得的换行符不是n。在页面上执行查看源,您将看到:

7:42AM o
 Fri, Feb 23rd

要纠正此问题,请使用双重转义:

"g:iA \o\\n D, M jS"