PHP xml到html的编码问题


PHP xml to html encoding issue

我正在从rss xml中抓取rss提要数据。有些字符串中有引号。在将字符串粘贴到数据库中之前,我将通过htmlenties()运行这些字符串。然后,当我试图在浏览器中显示相同的信息时,引号会显示为"â??"。字符存储为数据库中的"â?s"(无空格)

我的页面的标题

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">

我确信其他实体没有正确显示。我该如何纠正这一点?

一个引用了"Agawi"的示例提要:http://feeds.feedburner.com/TechCrunch/gaming

如果使用PHP,这个例程可能很有用。

它在标准的get_html_translation_table()中添加了M$Word通常替换为键入文本的字符代码
否则,这些字符将永远不会在html输出中正确显示,这将是您的麻烦。

function get_html_translation_table_CP1252() {
    $trans = get_html_translation_table(HTML_ENTITIES);
    $trans[chr(130)] = '&sbquo;';    // Single Low-9 Quotation Mark
    $trans[chr(131)] = '&fnof;';    // Latin Small Letter F With Hook
    $trans[chr(132)] = '&bdquo;';    // Double Low-9 Quotation Mark
    $trans[chr(133)] = '&hellip;';    // Horizontal Ellipsis
    $trans[chr(134)] = '&dagger;';    // Dagger
    $trans[chr(135)] = '&Dagger;';    // Double Dagger
    $trans[chr(136)] = '&circ;';    // Modifier Letter Circumflex Accent
    $trans[chr(137)] = '&permil;';    // Per Mille Sign
    $trans[chr(138)] = '&Scaron;';    // Latin Capital Letter S With Caron
    $trans[chr(139)] = '&lsaquo;';    // Single Left-Pointing Angle Quotation Mark
    $trans[chr(140)] = '&OElig;    ';    // Latin Capital Ligature OE
    $trans[chr(145)] = '&lsquo;';    // Left Single Quotation Mark
    $trans[chr(146)] = '&rsquo;';    // Right Single Quotation Mark
    $trans[chr(147)] = '&ldquo;';    // Left Double Quotation Mark
    $trans[chr(148)] = '&rdquo;';    // Right Double Quotation Mark
    $trans[chr(149)] = '&bull;';    // Bullet
    $trans[chr(150)] = '&ndash;';    // En Dash
    $trans[chr(151)] = '&mdash;';    // Em Dash
    $trans[chr(152)] = '&tilde;';    // Small Tilde
    $trans[chr(153)] = '&trade;';    // Trade Mark Sign
    $trans[chr(154)] = '&scaron;';    // Latin Small Letter S With Caron
    $trans[chr(155)] = '&rsaquo;';    // Single Right-Pointing Angle Quotation Mark
    $trans[chr(156)] = '&oelig;';    // Latin Small Ligature OE
    $trans[chr(159)] = '&Yuml;';    // Latin Capital Letter Y With Diaeresis
    ksort($trans);
    return $trans;
}
$trans = get_html_translation_table_CP1252();
$feed = strtr($feed, $trans);

是的,因为这些不是常规引号 ,更像Microsoft Word引号。您应该以feedburner为例,手动将它们转换为&ldquo;&rdquo;

例如

$feed = str_replace('“', '&ldquo;', $feed);
$feed = str_replace('”', '&rdquo;', $feed);