好吧,我在我正在制作的网站中有一些地方的标题有点古怪
我尝试过使用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
这仍然是个问题--有没有办法摆脱这些问题?
发布于 2013-01-02 04:02:21
看起来您拥有的标题是UTF-8编码的,但是您嵌入它的HTML页面实际上并没有标记为UTF-8,所以浏览器使用默认字符集解释文本,该字符集可能是ISO-8859-1。
假设页面上的所有文本实际上都是UTF-8 (或US-ASCII,它是UTF-8的子集),最简单的解决方案是只发送适当的HTTP头(和/或元标记)来指示正确的字符集。特别是,在PHP中,您可以执行以下操作:
header( "Content-Type: text/html; charset=utf-8" );或者,您可以在HTML代码的head部分包含等效的meta标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />或者,在HTML5中,简单地说:
<meta charset="utf-8">发布于 2013-01-02 04:26:46
你可以随时借用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);https://stackoverflow.com/questions/14112577
复制相似问题