我正在编写一个 AJAX 聊天脚本,并且正在集成一个系统来解析时间(基本上就像 BBCode)。问题是,当我尝试将时间(UNIX 时间戳)转换为与 date() 一起使用的整数时,它总是返回“0”。我用来查找和替换的代码如下。我还添加了我要解析的示例
$out = preg_replace("/\[time\](.*)\[\/time\]/i",date("c",(int)"$1",$out);
样本:
<b>GtoXic</b>: [time]1342129366[/time]
我正在编写一个 AJAX 聊天脚本,并且正在集成一个系统来解析时间(基本上就像 BBCode)。问题是,当我尝试将时间(UNIX 时间戳)转换为与 date() 一起使用的整数时,它总是返回“0”。我用来查找和替换的代码如下。我还添加了我要解析的示例
$out = preg_replace("/\[time\](.*)\[\/time\]/i",date("c",(int)"$1",$out);
样本:
<b>GtoXic</b>: [time]1342129366[/time]
因为您实际转换为整数的是文字 string $1
,并且将字符串转换为整数的工作方式如下:
为了让它工作,你会使用preg_replace_callback()
:
$output = preg_replace_callback("/#\[time\](.*)\[/time\]#i", function ($matches) {
return date("c", $matches[1]);
}, $input);
(int)
强制转换实际上是不必要的,当您将值传递给需要整数的函数时,PHP 会自动处理这个问题。
你需要使用preg_replace_callback()
.
您的脚本失败的原因是因为(int)"$1"
实际上是0
(零),所以在它作为参数之一传递之前,它已经转换为零。
您需要的是带有回调函数的preg_replace_callback :
$out = "<b>GtoXic</b>: [time]1342129366[/time]";
$out = preg_replace_callback('/\[time\]([0-9]*)\[\/time\]/i', 'test', $out);
function test($matches)
{
return date("c", (int)$matches[1]);
}