如何将日语编码为“日本に行って”? (UTF-8)

时间:2011-02-13 17:33:56

标签: php utf-8 encode

正如标题中的问题所述。 我似乎找不到以下任何一个答案: php标头,css标头,html标头,mysql字符集(到utf8_general_ci)或

<form acceptcharset="utf-8"... >

真的难倒这个。

我基本上都在经历这个过程:

  1. 键入日文字符,处理表单
  2. 表格保存在MySQL DB中
  3. PHP从MySQL DB中提取数据,并将其格式化为网页
  4. 在第3步,我检查代码,看它是字面上显示日文字符。 因为它正在这样做,我猜它导致了我得到的PHP错误(对于英文字符而言,正常工作的函数不能正常工作)。

    所以我想用UTF-8格式编码,但我不知道该怎么做?

    编辑:这是我在日文文本中使用的PHP函数

    function short_text_jap($text, $length=300) { 
        if (strlen($text) > $length) { 
                $pattern = '/^(.{0,'.$length.'}\\b).*$/s'; 
                $text = preg_replace($pattern, "$1...", $text); 
        } 
        return $text;
    

    但不是缩短文本量,而是返回整个事物。

2 个答案:

答案 0 :(得分:4)

由于您似乎想将UTF-8编码的字符串转换为ASCII和非ASCII字符转换为字符引用,您可以使用PHP’s multi-byte string functions来执行此操作:

mb_substitute_character('entity');
$str = '日本語';  // UTF-8 encoded string
echo mb_convert_encoding($str, 'US-ASCII', 'UTF-8');

输出结果为:

&#x65E5;&#x672C;&#x8A9E;

答案 1 :(得分:1)

对UTF8 的看法有点混淆:将目标定为获得字面日文字符的“UTF8版本”。

&#26085;之类的东西是与ASCII兼容的HTML实体(基本上是Unicode引用)已经在某些编码中表示,而UTF8是一种多字节编码方案,用于定义字符在字节级别上的存储方式。

我建议依赖字面形式,因为这样可以更容易管理国际字母表。

只需在任何地方迁移到UTF8:数据库,HTML,PHP和文件类型。然后就可以使用旨在处理多字节字符的PHP Multibyte String扩展名:

mb_internal_encoding("UTF-8");

function short_text_jap($text, $length=300) {
    return mb_strlen($text) > $length ? mb_substr($text, 0, $length) : $text;
}

echo short_text_jap('日本語', 2); // outputs 日本