0

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

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,我会正确看到重音符号。发生了什么?

4

5 回答 5

0

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

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

为了进行实际转换,您可以使用iconv(对于一般情况)、utf8_decode (UTF8 -> ISO-8859-1)、utf8_encode (ISO-8859-1 -> UTF8) 或mb_convert_encoding

为了帮助您找出源页面的编码是什么,您可以例如将网站通过w3c Validator自动检测编码。

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

此外,值得一看每个软件开发人员绝对、肯定必须了解 Unicode 和字符集(没有任何借口!)的绝对最小值,以获取有关编码的更多信息。

于 2010-04-17T13:00:14.553 回答
0

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

于 2010-04-17T13:00:29.207 回答
0

试试这个:

echo iconv('UTF-8', 'ASCII//TRANSLIT', $title);
于 2010-04-17T13:01:06.733 回答
0

查看PHP 简单 HTML DOM 解析器

像这样使用它:

$html = file_get_html('http://www.google.com/');
$ret = $html->find('title', 0);
于 2010-04-17T13:47:34.410 回答
0

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

于 2010-04-17T14:07:06.837 回答