2013-06-06 2 views
0

Я читал UTF-8, но мне нужен совет.UTF-8 и многоязычный сайт

Пример. У меня есть форма, где пользователь может вводить текст. Это может быть английский, а также японский. На следующей странице выводится текст и сохраняется в БД.

Все (или должно быть) определено как UTF-8. Все работает нормально, пока мы не добавим арабские или японские письма . Эти буквы становятся (если я правильно понял) форму Unicode %u06458.

Теперь вещь, я знаю, как вывести эти буквы:

$x= preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $x); 

Это сделает его UTF-8 код и вывести Japenese письмо просто отлично.

Но мой вопрос: я хочу проверить длину и сохранить ее в моей БД. Но одно японское письмо уже 8-бит по сравнению с обычной буквой, которая является 1-битной.

  1. Как проверить длину текста? Как AA = 2 и キキ = 2.
  2. Будут ли такие буквы всегда храниться как 8-бит %u06458 в моей базе данных? Что делать, если у меня есть текст, который имеет 2000 слов на японском языке (2000 * 8 бит)? Это в 8 раз больше, чем текст на английском языке.
  3. Любые общие советы?

ответ

2

PHP имеет функции, которые специфически обрабатывают многобайтовые (то есть Unicode) строки.

В руководстве по PHP укажите Multibyte string help и Multibyte string functions.

Что касается ваших вопросов:

  1. Вы можете проверить длину текста с помощью mb_strlen
  2. Вы можете хранить многобайтовые символы непосредственно в базе данных, без перекодирования их. Каждая многобайтовая символ занимает 2 байт
  3. Используйте функции PHP многобайтовой для обработки этих строк :)
+0

Да, чтобы сохранить его в базе данных, необходимо установить кодировку перед началом работы с БД. В mysqli это будет '$ db-> set_charset ('utf8');' например. – martinstoeckli

+0

mb_strlen отлично работает с 'ß', но с' م' он продолжает возвращать 8. Если я ничего не делаю '$ strLength = mb_strlen ($ str, 'UTF-8');' –

+0

@Nicolas. - Код 'echo mb_strlen ('م');' возвращает 2 в моем тесте. Вы сохранили файл PHP в формате UTF-8 (формат файла не декларация кодировки)? – martinstoeckli

Смежные вопросы