用PHP获取页面标题

时间:2010-04-17 12:58:15

标签: php regex fopen

当我想获得远程网站的标题时,我使用这个脚本:

function get_remotetitle($urlpage) {
    $file = @fopen(($urlpage),"r");
    $text = fread($file,16384);
    if (preg_match('/<title>(.*?)<\/title>/is',$text,$found)) {
        $title = $found[1];
    } else {
        $title = 'Title N/A';
    }
    return $title;
}


但是当我用重音标记一个网站标题时,我得到“ ”。但如果我查看PHPMyAdmin,我会正确地看到重音符号。发生了什么事?

5 个答案:

答案 0 :(得分:0)

问题是文本的编码与您在显示它的页面上使用的编码不同。

您要做的是找出数据的编码方式(例如,通过查看文本所使用的页面的编码方式)并将其转换为您自己使用的编码。

要进行实际转换,您可以使用iconv(针对一般情况),utf8_decode(UTF8 - &gt; ISO-8859-1),utf8_encode(ISO-8859) -1 - &gt; UTF8)或mb_convert_encoding

为了帮助您了解源页面的编码,您可以通过w3c Validator将网站放在自动检测编码的位置。

如果想要一种自动方式来确定编码,则必须查看HTML本身。您可以在HTML 4 specification中找到确定所选字符集的方法。

此外,有关编码的更多信息,请查看The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 1 :(得分:0)

这很可能是字符编码问题。您可能正确地获取了该字符,但显示它的页面具有错误的字符编码,因此它无法正确显示。

答案 2 :(得分:0)

试试这个:

echo iconv('UTF-8', 'ASCII//TRANSLIT', $title);

答案 3 :(得分:0)

结帐PHP Simple HTML DOM Parser

使用类似的东西:

$html = file_get_html('http://www.google.com/');
$ret = $html->find('title', 0);

答案 4 :(得分:0)

我解决了。我添加了htmlentities($text),现在显示重音等等。