Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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返回错误语言的元描述_Php_Html_Tags_Meta - Fatal编程技术网

使用php返回错误语言的元描述

使用php返回错误语言的元描述,php,html,tags,meta,Php,Html,Tags,Meta,我想知道是否有人能解释一下我正在经历的一个问题。我正在建立一个搜索引擎优化工具,看看网站的标题和描述元标签。我所经历的是使用 <?php $tags = get_meta_tags("https://twitter.com"); echo $tags['description']; ?> 我得到的描述返回德语 “这是我在丁根的工作,我在维奇斯滕大学工作。福克·弗伦登、专家、律师和阿克图伦 Nachricten“ 而且不是用英语 “立即连接到对您最重要的内容。关注您的朋友、专家

我想知道是否有人能解释一下我正在经历的一个问题。我正在建立一个搜索引擎优化工具,看看网站的标题和描述元标签。我所经历的是使用

<?php

$tags = get_meta_tags("https://twitter.com");
echo $tags['description'];
?>

我得到的描述返回德语

“这是我在丁根的工作,我在维奇斯滕大学工作。福克·弗伦登、专家、律师和阿克图伦 Nachricten“

而且不是用英语

“立即连接到对您最重要的内容。关注您的朋友、专家、喜爱的名人和突发新闻。”

我还发现Bing.com我也有这个问题。我也用Curl试过了,得到了同样的结果

这就是我的curl代码的样子

<?

$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: "; // browsers keep this blank. 

function file_get_contents_curl($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$html = file_get_contents_curl("https://twitter.com");

//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
    $description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
    $keywords = $meta->getAttribute('content');
if($meta->getAttribute('language') == 'language');
    $language = $meta->getAttribute('language');
}

echo "Title: $title". '<br/><br/>';
echo "Description: $description". '<br/><br/>';
echo "Keywords: $keywords";

?>

curl响应在这里运行=>


以前有人遇到过这个问题吗?

get\u meta\u tags
发送的HTTP请求不包含传统的
Accept Language
头,普通web浏览器发送此头是为了通知服务器哪种语言可能合适

有些网站(如Twitter)似乎会使用地理IP查找来确定内容语言:

来自我在瑞典的本地计算机

Koppla direkt upp dig mot det somär viktigast för dig。Följ dina vänner,专家,favoritkändisar,och nyheter

来自我在英国伦敦的副总裁

立即连接到对您最重要的内容。关注你的朋友、专家、喜爱的名人和突发新闻

因此,如果您只想查看英文元数据,那么您需要使用
Accept language
和其他可能的方法,使脚本的行为类似于一个英文本地化的web浏览器

编辑:下面是一个示例。有关的详细信息

代码示例

<?php
function file_get_contents_curl($url)
{
$ch = curl_init();

$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$header[] = "Cache-Control: max-age=0"; 
$header[] = "Connection: keep-alive"; 
$header[] = "Keep-Alive: 300"; 
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
$header[] = "Accept-Language: en-us,en;q=0.5";

curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$html = file_get_contents_curl("http://twitter.com");

//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
    $description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
    $keywords = $meta->getAttribute('content');
if($meta->getAttribute('language') == 'language');
    $language = $meta->getAttribute('language');
}

echo "Title: $title". '<br/><br/>';
echo "Description: $description". '<br/><br/>';
echo "Keywords: $keywords";

?>

get\u meta\u tags
发送的HTTP请求不包含传统的
Accept Language
头,普通web浏览器发送该头以通知服务器哪种语言可能合适

有些网站(如Twitter)似乎会使用地理IP查找来确定内容语言:

来自我在瑞典的本地计算机

Koppla direkt upp dig mot det somär viktigast för dig。Följ dina vänner,专家,favoritkändisar,och nyheter

来自我在英国伦敦的副总裁

立即连接到对您最重要的内容。关注你的朋友、专家、喜爱的名人和突发新闻

因此,如果您只想查看英文元数据,那么您需要使用
Accept language
和其他可能的方法,使脚本的行为类似于一个英文本地化的web浏览器

编辑:下面是一个示例。有关的详细信息

代码示例

<?php
function file_get_contents_curl($url)
{
$ch = curl_init();

$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
$header[] = "Cache-Control: max-age=0"; 
$header[] = "Connection: keep-alive"; 
$header[] = "Keep-Alive: 300"; 
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
$header[] = "Accept-Language: en-us,en;q=0.5";

curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$html = file_get_contents_curl("http://twitter.com");

//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
    $description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
    $keywords = $meta->getAttribute('content');
if($meta->getAttribute('language') == 'language');
    $language = $meta->getAttribute('language');
}

echo "Title: $title". '<br/><br/>';
echo "Description: $description". '<br/><br/>';
echo "Keywords: $keywords";

?>



我在英国,我托管的服务器是One.com。我也这么想,但当在他们的网站上测试时,他们也出现了同样的问题。好吧,你有一些建议的解决办法,但我也想知道为什么会发生这种情况。因此,您可以确认发起请求的IP与奥地利或德国没有关系。您是否能够在执行脚本时运行wireshark或tcpdump,以查看其发送的请求标头的类型?我将尝试运行wireshark并报告它只发送
主机
标头,没有别的了。我在英国,我的主机服务器是One.com。我也这么想,但当在他们的网站上测试时,他们也出现了同样的问题。好吧,你有一些建议的解决办法,但我也想知道为什么会发生这种情况。因此,您可以确认发起请求的IP与奥地利或德国没有关系。您是否能够在执行脚本时运行wireshark或tcpdump,以查看其发送的请求标头的类型?我将尝试运行wireshark并报告它只发送
主机
标头,没有别的了。谢谢你的回答,我用curl尝试了一下,得到了相同的结果=>,请参阅上面更新的代码。仅仅使用curl是不够的,你需要将它与第二个链接结合起来,介绍如何设置
Accept Language
标题。请参阅我更新的答案中的代码示例。@代码的问题在于未在函数中设置$header。您需要添加
global$header内部
文件\u获取\u内容\u curl()
以便访问它。您的联系人,非常感谢。我在Bing和Twitter上试过这个,工作和回报都是英语。在您的示例中,请更新到,因为它不适用于第一个URL。感谢您的回答我尝试了curl,得到了相同的结果=>,请参阅上面更新的代码。仅使用curl是不够的,您需要将它与第二个链接结合起来,以了解如何设置
接受语言
标题。请参阅我更新的答案中的代码示例。@代码的问题在于未在函数中设置$header。您需要添加
global$header内部
文件\u获取\u内容\u curl()
以便访问它。您的联系人,非常感谢。我在Bing和Twitter上试过这个,工作和回报都是英语。在您的示例中,请更新到,因为它不适用于第一个URL。谢谢