1

基本上我有这个字符串:

Český, Deutsch, English (US), Español (ES), Français (France), Italiano, 日本語, 한국어, Polski, 中文(繁體)

我想把它转换成所有可能的 HTML 实体(也可能有俄语字符!)。我尝试使用不同的字符集制作不同的“htmlspecialchars”和“htmlentities”函数,但它返回空字符串......

$l = htmlentities("Český, Deutsch, English (US), Español (ES), Français (France), Italiano, 日本語, 한국어, Polski, 中文(繁體) €", ENT_COMPAT, "BIG5-HKSCS");
$l = htmlentities($l, ENT_COMPAT, "KOI8-R");
$l = htmlentities($l, ENT_COMPAT, "EUC-JP");
$l = htmlentities($l, ENT_COMPAT, "Shift_JIS");
$l = htmlentities($l, ENT_COMPAT, "Shift_JIS");
echo $l;

返回一个空字符串。

有什么帮助吗?

4

3 回答 3

2

这是我的“unutf8”函数,它将所有 UTF8 字符转换为表单的 HTML 实体〹

function unutf8($str) {
    return preg_replace_callback("([\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}|[\xF8-\xFB][\x80-\xBF]{4}|[\xFC-\xFD][\x80-\xBF]{5})",
        function($m) {
            $c = $m[0];
            $out = bindec(ltrim(decbin(ord($c[0])),"1"));
            $l = strlen($c);
            for( $i=1; $i<$l; $i++) {
                $out = ($out<<6) | bindec(ltrim(decbin(ord($c[$i])),"1"));
            }
            if( $out < 256) return chr($out);
            return "&#".$out.";";
        },$str);
}

它将字符串解析为有效的 UTF8 字符序列,并将多字节序列转换为字符的序数值。它非常混乱,我不希望用它赢得任何优秀编码的奖项,但它确实有效。

但是请注意,如果您有未编码的字符,那么您将遇到问题。例如,如果由于某种原因你有é©©,那么结果将是欢。在将字符串传递给函数之前,请确保您的字符串是有效的 UTF8。

于 2013-09-11T13:11:30.217 回答
1

使用 header 将 HTTP 标头修改为 utf-8:

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

另外,请确保您的 HTML 文档也是 utf-8 格式:

<meta http-equiv="Content-type" content="text/html" charset="utf-8" />
于 2013-09-11T13:05:47.450 回答
0

不要寻求艰难的解决方案,只需遵循这个小而简单的步骤: 1) mysql_set_charset("utf8", $conn); 使用您的配置连接代码进行设置。

或者

2) mysql_query("SET NAMES 'UTF8'"); 在此处输入您的查询............ mysql_set_charset("UTF8", queryResult);

于 2013-09-11T13:11:45.990 回答