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


Reading source of another website with PHP and giving it to JavaScript as a string

我想以JavaScript中的字符串形式阅读另一个网站的元描述。我尝试使用CORS,但收到一个错误,说"请求的资源上不存在‘访问控制允许来源’标头。"

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

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

选项NR.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>

这是另一种选择。。。它简洁明了;然而,它可能不会给你想要的结果:

选项2

<?php
    //SIMPLY CHANGE THE URL TO THE URL YOU DESIRE 
    $metaTags           = get_meta_tags('https://yahoo.com/');
    $metaDescription    = $metaTags["description"];
    var_dump($metaDescription);
    //USING A DATA-SOURCE ARRAY:
    $arrURLs            = array("http://sbb.ch", "http://alibabaexpress.com", "https://yahoo.com", "http://badoo.com" );
    $arrMetaDescs       = array();
    // LOOP THROUGH THE $arrURLs AND GET THE META
    // AND STORE THE RESULT IN AN ARRAY TOO.
    foreach($arrURLs as $url){
        //IF YOU WANT YOU COULD USE THE URL AS KEY FOR EASIER IDENTIFICATION
        try{
            $metaTags                   = get_meta_tags($url);
            if($metaTags){
                $key                    = preg_replace("&(https:'/'/|http:'/'/|www'.|'/.*$)?&", "", $url);
                $arrMetaDescs[$key]     = $metaTags["description"];
            }
        }catch(Exception $e){
        }
    }
    var_dump($arrMetaDescs);
?>
<script type="text/javascript">
    //EXPOSE THE META TO YOUR JAVASCRIPT USING A GLOBAL VARIABLE (FOR EXAMPLE).
    var SITE_META_DESC = '<?php echo $metaDescription; ?>';
    alert(SITE_META_DESC);

    // IN THE CASE OF ARRAY-BASED META-EXTRACTION,
    // STORE THE META VALUES IN JSON FORMAT FOR JAVASCRIPT
    var ARR_META_DESC_EXTRACT = '<?php echo json_encode($arrMetaDescs); ?>';
    console.log(ARR_META_DESC_EXTRACT);
</script>

这里有一种方法:

  1. 在服务器上设置页面source_getter.php,并包含以下代码(来自此答案):

$html = file_get_contents('your_url_here'); echo $html;

  1. 如果您使用的是jQuery,请运行如下请求:

$.ajax({ url : 'source_getter.php', success : function (result) { doSomethingWithResult(result); // result will equal $html from your PHP code }, error : function () { alert("error"); } })

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

这可能是一种简单的方法:

<?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>

但请记住,如果网站没有设置元描述标签,则不会返回任何内容,也不会显示任何警报。