Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP GANN如何读取javascript_Php_Dom_Html Parsing - Fatal编程技术网

PHP GANN如何读取javascript

PHP GANN如何读取javascript,php,dom,html-parsing,Php,Dom,Html Parsing,我正在使用php-ganon-dom解析器抓取一些html页面,但是我被困在需要从源代码读取javascript的地方 <script type="text/javascript"> Event.observe(window, 'load', function() { ig_lightbox_main_img=0; ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg'); ig_li

我正在使用php-ganon-dom解析器抓取一些html页面,但是我被困在需要从源代码读取javascript的地方

<script type="text/javascript">
    Event.observe(window, 'load', function() {
        ig_lightbox_main_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig_lightbox_img_labels.push("Some text");
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig_lightbox_img_labels.push("Some text 2");
    });
</script>

但这是行不通的。关于如何读取脚本的任何想法,请尝试在
$html
对象的字符串中使用
type=text/javascript
的引号

我看了一下,他们有一个例子:

foreach($html('a[href ^= "http://"]') as $element) {
    $element->wrap('center');
}
我认为是
/
使它返回了错误的结果

编辑

我以前被这个问题弄糊涂了,我想问题是你无法在脚本中获取数据,这是因为你的选择器。无论如何,经过一点思考,如果您有一个包含数据的脚本标记的字符串副本,只需在其上运行一个正则表达式即可

下面是我测试的一个示例:

$string = "<script type=\"text/javascript\">
    Event.observe(window, 'load', function() {
        ig_lightbox_main_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig_lightbox_img_labels.push(\"Some text\");
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig_lightbox_img_labels.push(\"Some text 2\");
    });
</script>";

$regex = "/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Za-z0-9+&@#\/%=~_|$?!:,.]*[A-Za-z0-9+&@#\/%=~_|$]/";

$results = array();

preg_match_all($regex,$string,$results);

var_dump($results);
//Result: array(1) { [0]=> array(2) { [0]=> string(33) "http://someimageurl.com/image.jpg" [1]=> string(34) "http://someimageurl.com/image2.jpg" } } 
$string=”
事件。观察(窗口“加载”,函数(){
ig_灯箱_主灯_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig\u lightbox\u img\u标签。按(\“一些文本\”)键;
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig\u lightbox\u img\u标签。按(\“一些文本2\”);
});
";
$regex=“/\b(?:(?:https?| ftp | file):\/\/\/\www.| ftp\)[-A-Za-z0-9+&@#\/%=~(u124;$?!:,.]*[A-Za-z0-9+&@#\/%=~(u124$)/”;
$results=array();
preg_match_all($regex,$string,$results);
var_dump($结果);
//结果:数组(1){[0]=>数组(2){[0]=>字符串(33)”http://someimageurl.com/image.jpg“[1]=>字符串(34)”http://someimageurl.com/image2.jpg" } } 
$results
中包含从
preg_match_all
()返回的URL数据

如果有帮助的话,一旦你有了URL,你可以在PHP中使用
parse_URL
(),这将把字符串URL拆分成更容易使用的东西


注意:使用的正则表达式是一个非常简单的表达式,不会涵盖所有情况。如前所述,很难得到一个完美的正则表达式。

我想从ig_lightbox_img_sequence.push(');$html('a[href^=“http:/”])这个选择器如何处理这个…?不确定您的确切意思,您的选择器很好,我建议您在
文本/javascript
部分周围添加
。例如:
。产品img框脚本[type=“text/javascript”]
,试一试?它只是没有找到任何可重复的内容吗?它正在读取.product img box div下的所有脚本标记,但我只想获取我在问题中发布的脚本标记及其内容抱歉,被问题弄糊涂了,更新了答案以反映新发现。简言之,一个经过仔细编码的正则表达式我们应该采取行动。
$string = "<script type=\"text/javascript\">
    Event.observe(window, 'load', function() {
        ig_lightbox_main_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig_lightbox_img_labels.push(\"Some text\");
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig_lightbox_img_labels.push(\"Some text 2\");
    });
</script>";

$regex = "/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Za-z0-9+&@#\/%=~_|$?!:,.]*[A-Za-z0-9+&@#\/%=~_|$]/";

$results = array();

preg_match_all($regex,$string,$results);

var_dump($results);
//Result: array(1) { [0]=> array(2) { [0]=> string(33) "http://someimageurl.com/image.jpg" [1]=> string(34) "http://someimageurl.com/image2.jpg" } }