2

さて、私が作っているサイトの中に、タイトルがやや厄介な場所がいくつかあります

utf8_encodeとと他のいくつかの解決策を使ってみましたが、うまくいきませhtml_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

ワードプレス(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 に答える
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 に答える