使用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。谢谢