PHP: sscanf извлекает значения из строки в двойных кавычках - PullRequest
1 голос
/ 08 мая 2011

Я пытаюсь разобрать 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;

Спасибо за помощь.

Ответы [ 4 ]

2 голосов
/ 08 мая 2011

Эти данные представляют собой просто сериализованный текст PHP из serialize()

. В этом случае вы можете получить необходимые данные с помощью:

$sessionData = unserialize('a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
list($ip, $date) = each($sessionData);
0 голосов
/ 08 мая 2011

Вы можете использовать регулярные выражения для этого.

$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, второе к дате.

0 голосов
/ 08 мая 2011

Интересным было бы использование взрыва, используя "в качестве разделителя", как это:

<?php
$res = explode('"','a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
print_r($res);
?>

Любое значение в двойных кавычках будет возвращено в нечетном индексе, т.е.3]

0 голосов
/ 08 мая 2011
$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

...