Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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读取另一个网站的源代码并将其作为字符串提供给JavaScript_Javascript_Php_Html_Cross Domain - Fatal编程技术网

用PHP读取另一个网站的源代码并将其作为字符串提供给JavaScript

用PHP读取另一个网站的源代码并将其作为字符串提供给JavaScript,javascript,php,html,cross-domain,Javascript,Php,Html,Cross Domain,我想阅读另一个网站的元描述作为JavaScript中的字符串。我尝试使用CORS,但出现一个错误,提示“请求的资源上不存在“Access Control Allow Origin”头。” 有人建议我可以使用PHP来实现这一点。我不懂PHP,需要一些帮助。如何调用PHP函数来读取不同域上某个网页的源代码,然后将输出作为字符串提供给JavaScript函数?以下是一种方法: <?php // Get Meta Tags from the given URL $tags = get_meta_

我想阅读另一个网站的元描述作为JavaScript中的字符串。我尝试使用CORS,但出现一个错误,提示“请求的资源上不存在“Access Control Allow Origin”头。”


有人建议我可以使用PHP来实现这一点。我不懂PHP,需要一些帮助。如何调用PHP函数来读取不同域上某个网页的源代码,然后将输出作为字符串提供给JavaScript函数?

以下是一种方法:

<?php

// Get Meta Tags from the given URL
$tags = get_meta_tags('http://www.example.com');

?>

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/javascript">

        var urlMetaDesc = "<?php echo $tags['description']; ?>";

        alert(urlMetaDesc);

        </script>
    </head>
    <body>
    </body>
</html>
  • 在服务器上设置一个页面
    source\u getter.php
    ,并包含以下代码(来自):
  • $html=file\u get\u contents('your\u url\u here');
    echo$html

  • 如果使用jQuery,请运行如下请求:
  • $.ajax({
    url:'source_getter.php',
    成功:功能(结果){
    dosomethingwhithresult(结果);
    //结果将等于PHP代码中的$html
    },
    错误:函数(){
    警报(“错误”);
    }
    })


    我没有专门测试过这段代码,但它应该可以正常工作。

    这可能是最简单的方法:

    <?php
    
    // Get Meta Tags from the given URL
    $tags = get_meta_tags('http://www.example.com');
    
    ?>
    
    <!DOCTYPE HTML>
    <html>
        <head>
            <script type="text/javascript">
    
            var urlMetaDesc = "<?php echo $tags['description']; ?>";
    
            alert(urlMetaDesc);
    
            </script>
        </head>
        <body>
        </body>
    </html>
    
    
    var urlMetaDesc=“”;
    警报(urlMetaDesc);
    
    请记住,如果网站没有设置meta description标记,则不会返回任何内容,也不会显示任何警报。

    这里有一个简单、直接的方法来帮助您获得所需的内容。先试试看。。。将下面的全部代码粘贴到一个空PHP文件上并运行它。在这个简单的场景中不需要Ajax。因此,您有两种选择:

    第1个选项

    <?php
        //SIMPLY CHANGE THE URL TO THE URL YOU DESIRE
        $siteURL        = "https://yahoo.com/";
        $siteContent    = file_get_contents($siteURL);
        $metaRx         = "#<meta .*description.*>$#m";
        preg_match($metaRx, $siteContent, $metaMatches);
        $metaString     = str_replace("'", "\'", $metaMatches[0]);
    
        //DUMP THE ARRAY OF MATCHES TO THE SCREEN... JUST TO EXPLORE THE RESULTS
        var_dump($metaMatches);
    ?>
    <script type="text/javascript">
        //EXPOSE THE META TO YOUR JAVASCRIPT USING A GLOBAL VARIABLE (FOR EXAMPLE).
        var SITE_META_DESC = '<?php echo $metaString; ?>';
        // DUMP VALUE TO THE SCREEN USING ALERT....
        alert(SITE_META_DESC);
    </script>
    

    您正在下载(并返回)网站的整个html源代码,而问题具体要求的只是元描述标签。这是一种不必要的资源使用和返回错误信息的行为。为什么不简单地使用
    get\u meta\u tags()
    而不是下载整个源代码并使服务器cpu使用正则表达式?get\u meta\u tags确实是一个完美的解决方案。然而,有些人抱怨这个功能不适合他们。。。我会更新答案。。。不过,感谢您的提醒……;-)它对某些人不起作用的原因是因为现在很多网站不再使用元描述标签。谷歌就是一个例子<代码>获取meta标签()
    但是它确实完成了它应该做的事情。不客气:)当然。。。你是对的。。。。但是你自己看看这个。。。试着在你上面运行代码。。。。第一个备选方案返回/提醒了@Chinmay Ratnaparkhi想要的内容。第二个(首选和简洁的)选择返回并提醒了我的雅虎你(可能)知道为什么吗?我真的不知道为什么会发生这种情况。尤其是因为“MyYahoo”根本没有出现在任何源代码中。很奇怪。你能测试一下你的代码吗?用你得到的内容替换你的url?然后尝试查看源代码。您的结果和您在源代码中看到的内容是否一致?这对我来说很好,非常感谢!是否可以让JavaScript将URL提供给PHP?我有一个URL列表,我想得到它的描述,所以如果我能在一个URL数组中循环,那就太好了。@ChinmayRatnaparkhi是和否。你看,PHP在网站加载之前就完成了它的工作。Javascript在网站加载期间或之后执行其工作。因此,如果您真的希望Javascript将URL发送到PHP脚本,那么网站必须重新加载,以便PHP能够对其进行处理。您可以使用Ajax来防止可见的网站重新加载。但要想让它发挥作用,脚本将变得复杂得多。