我有一个新闻通讯系统,我试图在
PHP网站中加入.
PHP站点加载内容区域,并将脚本加载到页面的头部.这适用于为网站生成的代码,但现在我有我试图合并的新闻通讯.
最初我打算使用iFrame但是AJAX和jQuery调用的数量使得这非常复杂.
所以我认为我可以使用cURL将新闻稿页面加载为变量.然后我将使用RegEx来获取body标签之间的内容并将其放在内容区域中.最后,我将再次使用RegEx搜索头部并抓取任何脚本.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config_live_site."lib/alerts/user/update.php?email=test@test.com.au"); # URL to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); # return into a variable
curl_setopt($ch, CURLOPT_HEADER, 0);
$loaded_result = curl_exec( $ch ); # run!
curl_close($ch);
// Capture the body content and place in $_content
if (preg_match('%<body>([\s\S]*)</body>%', $loaded_result, $regs)) {
$_content .= $regs[1];
} else {
$_content .= "<p>No content to display.</p>";
}
// Capture the scripts and place in the head
if (preg_match('%(<script type="text/javascript">[\s\S]*</script>)%', $loaded_result, $regs)) {
$headDetails .= $regs[0];
}
这大部分时间都有效,但如果文档正文中有脚本,则会捕获到最后一个/脚本.
我猜我的问题是双重的…
A.是否有更好的整体方法(我的截止日期非常短,因此需要快速解决方案而不需要编辑新闻通讯代码)?
B.我需要使用什么RegEx来捕获第一个脚本?
最佳答案 我想你需要加一个?在*之后的脚本正则表达式,所以它不贪心.贪婪的正则表达式尽可能匹配(第一个开始标记和最后一个结束之间的所有内容),非贪婪匹配尽可能少(仅在开始标记和第一个结束标记之间).尝试:
%(<script type="text/javascript">[\s\S]*?</script>)%
如上所述,将其更改为preg_match_all,您应该只匹配各个脚本部分,而不是第一个和最后一个脚本标记之间的所有内容.