用php解析javascript文本
问题描述:
问候!我听说过各种方法来捕获和返回文本。例如正则表达式。我对PHP稍微陌生,但我想知道如何使用PHP捕获并从此JavaScript代码返回文本。我只对捕获msgBody,msgTitle和insertDate感兴趣。感谢您看我的问题用php解析javascript文本
function wibiyaNotifierLoad() {
if (typeof(jQuery.cookie) == 'function') {
loadjscssfile("Graphics_Toolbar/Notifier/notifier_2.css?v2", "css", "head");
var data = {
"count": 1,
"notifications": [{
"Id": "264727",
"toolbarId": "602582",
"msgId": "9",
"msgTitle": "Its that time of year!",
"msgBody": "check you email for updates!",
"msgLink": "",
"msgImage": "",
"filter": "",
"startDate": "2011-03-22 23:00:00",
"expirationDate": "2011-03-23 00:00:00",
"active": "1",
"insertDate": "2011-03-22 23:12:31"
}],
"ok": true
};
答
当你说解析,你应该看看J4P5工具。但是你可能会在这里得到一个不精确的解决方案和正则表达式。要捕获文本,然后提取每个值:
preg_match('#(\[\{.*?\}\])#s', $javascript, $match);
$values = json_decode($match[1], TRUE);
$msgBody = $values[0]["msgBody"];
能否把用然而'#"notifications": (\[\{
启动它的正则表达式更加明确。
答
我经常使用preg_replace函数来捕获我想要的一些数据。你可以在这里尝试一下:
http://www.functions-online.com/preg_replace.html
这个网站提供了您可以用它来磨练自己的正则表达式的技能
答
对于单一的正则表达式来获取你需要的数据,你可以使用下面的模式(注意,这需要反斜线和报价的时候插入代码转义):
/(["'])(msgBody|msgTitle|insertDate)\1\s*:\s*(['"])((?:[^'"\\]+|\\.|(?!\3|\\).)*)\3/s
密钥的名称将在子捕获2和子捕获4例如实际的内容,让我们假设你的JavaScript存储在$text
,你可以使用下面的PHP代码中提取信息:
<?php
$regex = '/(["\'])(msgBody|msgTitle|insertDate)\\1\\s*:\\s*([\'"])((?:[^\'"\\\\]+|\\\\.|(?!\\3|\\\\).)*)\\3/s';
preg_match_all($regex, $text, $match, PREG_SET_ORDER);
$data = array();
foreach ($match as $cap)
{
$data[$cap[2]] = $cap[4];
}
var_dump($data);
+0
感谢一堆! – jimmy 2011-03-25 11:31:02
答
preg_match('/\[(.*?)\]/s', $javascript, $match);
$json = json_decode($match[1]);
print $json->{'msgBody'};
print $json->{'msgTitle'};
print $json->{'insertDate'};
准确地说,“捕获”是什么意思?在什么情况下?你正在准备一个Ajax调用,还是解析源文件? – 2011-03-25 10:56:25