我正在尝试解析会话字符串中双引号中包含的2个值。其他字符串变量不是常量,因此不能使用任何其他字符作为标记。我只需要引用的值。我的以下sscanf功能不完整。
$string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}';
sscanf($string,'%[^"]', $login_ip, $login_date);
echo $login_ip;
echo $login_date;
感谢您的帮助。
答案 0 :(得分:2)
该数据只是来自serialize()
在这种情况下,您可以获得所需的数据:
$sessionData = unserialize('a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
list($ip, $date) = each($sessionData);
答案 1 :(得分:0)
$string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}';
preg_matches("/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/",$string,$matches);
echo $matches[1];
这应该返回你的IP地址。咨询php.net
答案 2 :(得分:0)
您可以使用正则表达式来执行此操作。
$string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}';
$pattern = '/"(?P<ip>[^"]*)"[^"]*"(?P<date>[^"]*)"/';
preg_match( $pattern, $string, $matches );
echo $matches['ip'].' '.$matches['date'];
第一个引用的值将转到ip,第二个到目前为止。
答案 3 :(得分:0)
一个有趣的黑客就是使用“像这样的分隔符使用爆炸:
<?php
$res = explode('"','a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
print_r($res);
?>
双引号中的任何值都将以奇数索引返回,即$ res [1],$ res [3]