2

好吧,我正在制作的网站中有一些地方的标题有些古怪

我试过使用utf8_encodeandhtml_entity_decode(stripslashes($title),ENT_QUOTES, "UTF-8")和其他几个不起作用的解决方案。我似乎无法摆脱它们:这是一个例子:

在我尝试之前的标题:

New Era Miami Dolphins NFL® 9FIFTY� Solid Snap Miami Dolphins - Zappos.com Free Shipping BOTH Ways

这是在 utf8_encode 和 html 实体之后

New Era Miami Dolphins NFL® 9FIFTY⢠Solid Snap Miami Dolphins - Zappos.com Free Shipping BOTH Ways

它仍然有问题 - 有没有办法摆脱那些?

4

2 回答 2

0

看起来您拥有的标题是 UTF-8 编码的,但您嵌入它的 HTML 页面实际上并未标记为 UTF-8,因此浏览器使用默认字符集解释文本,这可能是 ISO -8859-1。

假设页面上的所有文本实际上都是 UTF-8(或 US-ASCII,它的一个子集),最简单的解决方案是发送适当的 HTTP 标头(和/或元标记)来指示正确的字符集。特别是,在 PHP 中,您可以执行以下操作:

header( "Content-Type: text/html; charset=utf-8" );

或者您可以在 HTML 代码的 head 部分中包含等效的元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

或者,在 HTML5 中,简单地说:

<meta charset="utf-8">
于 2013-01-01T20:02:21.177 回答
0

您总是可以从 wordpress (seems_utf8) 借用功能并根据您的需要进行修改:

function remove_none_utf8($str) {
    $ret = '';

    $length = strlen($str);

    for ($i=0; $i < $length; $i++) {
            $ok = true;

        $c = ord($str[$i]);

        if ($c < 0x80) $n = 0; # 0bbbbbbb

        elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb

        elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb

        elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb

        elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb

        elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b

        else continue; # Does not match any model


        for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?

            if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) {
                            $ok = false;

                continue;
                    }

        }
            if ($ok === true) $ret .= $str[$i];

    }

    return $ret;

}

所以你可以像这样使用它:

$str = "New Era Miami Dolphins NFL® 9FIFTY� Solid Snap Mi";
echo remove_none_utf8($str);
于 2013-01-01T20:26:46.160 回答