我在一个网站上有一些地方,我正在制作标题有些棘手的地方
我尝试过使用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
它仍然存在问题 - 有没有办法摆脱那些?
答案 0 :(得分: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">
答案 1 :(得分:0)
你总是可以从wordpress(seem_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);