Как я могу закодировать японский во что-то вроде "日本 に 行 っ て"? (UTF-8) - PullRequest
3 голосов
/ 13 февраля 2011

Как говорится в вопросе в названии. Я не могу найти ответ ни с одним из следующих: заголовки php, заголовки css, заголовки html, наборы символов mysql (в utf8_general_ci) или

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

На самом деле поставлен в тупик.

Я в основном прохожу этот процесс:

  1. Введите японские символы, обработайте форму
  2. Форма сохраняется в БД MySQL
  3. PHP извлекает данные из БД MySQL и форматирует их для веб-страницы

На шаге 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 ]

4 голосов
/ 13 февраля 2011

Поскольку вы, похоже, хотите преобразовать вашу кодированную строку UTF-8 в символы ASCII и не-ASCII в символьные ссылки, вы можете использовать многобайтовые строковые функции PHP для этого:

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

Вывод:

&#x65E5;&#x672C;&#x8A9E;
1 голос
/ 14 февраля 2011

Кажется, что существует некоторая путаница относительно того, что такое 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 日本
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...