您可能已经开始混合编码类型。
例如。以 iso-8859-1 形式发送但从 MySQL 或 XML 获取 UTF-8 文本编码的页面通常会失败。
要解决此问题,您必须控制与您选择使用内部编码类型相关的输入编码类型。
如果您将其作为 iso-8859-1 发送,则用户的输入也是 iso-8859-1。
header("Content-type:text/html; charset: iso-8859-1");
如果 mysql 发送 latin1 你不需要做任何事情。
但是,如果您的输入不是 iso-8859-1,则必须在将其发送给用户之前对其进行转换,或者在存储之前将其适应 Mysql。
mb_convert_encoding($text, mb_internal_encoding(), 'UTF-8'); // If it's UTF-8 to internal encoding
简而言之,您必须始终将输入转换为适合内部编码,并转换输出以匹配外部编码。
这是我选择使用的内部编码。
mb_internal_encoding('iso-8859-1'); // Internal encoding
这是我使用的代码。
mb_language('uni'); // Mail encoding
mb_internal_encoding('iso-8859-1'); // Internal encoding
mb_http_output('pass'); // Skip
function convert_encoding($text, $from_code='', $to_code='')
{
if (empty($from_code))
{
$from_code = mb_detect_encoding($text, 'auto');
if ($from_code == 'ASCII')
{
$from_code = 'iso-8859-1';
}
}
if (empty($to_code))
{
return mb_convert_encoding($text, mb_internal_encoding(), $from_code);
}
return mb_convert_encoding($text, $to_code, $from_code);
}
function encoding_html($text, $code='')
{
if (empty($code))
{
return htmlentities($text, ENT_NOQUOTES, mb_internal_encoding());
}
return mb_convert_encoding(htmlentities($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code);
}
function decoding_html($text, $code='')
{
if (empty($code))
{
return html_entity_decode($text, ENT_NOQUOTES, mb_internal_encoding());
}
return mb_convert_encoding(html_entity_decode($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code);
}