Mb convert kana: примеры (PHP)

Работа с японской письменностью в PHP: mb_convert_kana
Раздел: Многобайтовые строки
mb_convert_kana(string $string, string $mode = "KV", ?string $encoding = null): string

Функция mb_convert_kana

Функция mb_convert_kana преобразует символы в строке между различными формами записи японской письменности. Она входит в модуль mbstring и предназначена для работы с многобайтовыми кодировками.

Область применения

Функция используется при обработке текстов на японском языке для стандартизации или преобразования символов. Типичные сценарии включают нормализацию пользовательского ввода, подготовку данных для поиска или сравнения, конвертацию для корректного отображения.

Аргументы функции
  • $string (string) – обрабатываемая строка.
  • $mode (string) – строка, задающая тип преобразования. Она может содержать комбинацию опций.
  • $encoding (string|null) – кодировка строки. Если значение равно null или не указано, используется внутренняя кодировка.

Параметр $mode может включать следующие флаги:

  • r – Преобразование полныхwidth латинских символов в полуwidth.
  • R – Преобразование полуwidth латинских символов в полныеwidth.
  • n – Преобразование полныхwidth цифр в полуwidth.
  • N – Преобразование полуwidth цифр в полныеwidth.
  • a – Преобразование полныхwidth латинских букв и цифр в полуwidth.
  • A – Преобразование полуwidth латинских букв и цифр в полныеwidth.
  • s – Преобразование полныхwidth пробелов в полуwidth.
  • S – Преобразование полуwidth пробелов в полныеwidth.
  • k – Преобразование полныхwidth катаканы в полуwidth катакану.
  • K – Преобразование полуwidth катаканы в полныеwidth катакану.
  • h – Преобразование полныхwidth хираганы в полуwidth катакану.
  • H – Преобразование полуwidth катаканы в полныеwidth хирагану.
  • c – Преобразование полныхwidth хираганы в полныеwidth катакану.
  • C – Преобразование полныхwidth катаканы в полныеwidth хирагану.
  • V – Удаление голосовых знаков, преобразование в округлые символы.

Примеры преобразований

Базовые преобразования латиницы и цифр
$str = "ABC 123";
echo mb_convert_kana($str, 'a');
// Преобразует полныеwidth буквы и цифры в полуwidth
ABC 123
$str = "ABC 123";
echo mb_convert_kana($str, 'A');
// Преобразует полуwidth буквы и цифры в полныеwidth
ABC 123
Работа с катаканой и хираганой
$str = "アイウエオ";
echo mb_convert_kana($str, 'K');
// Полуwidth катакана в полныеwidth
アイウエオ
$str = "あいうえお";
echo mb_convert_kana($str, 'c');
// Хирагана в полныеwidth катакану
アイウエオ
Комбинирование флагов
$str = "ABC 123 アイウ";
echo mb_convert_kana($str, 'aK');
// Одновременно преобразует латиницу/цифры в полуwidth,
// а катакану в полныеwidth
ABC 123 アイウ

Похожие функции в PHP

В PHP существуют другие функции для работы с многобайтовыми строками и преобразования символов.

Изменяет регистр символов в строке с учетом многобайтовых кодировок. Подходит для приведения строк к верхнему или нижнему регистру на разных языках.

iconv

Конвертирует строку из одной кодировки в другую. Может выполнять транслитерацию. Используется для изменения кодировки текста, а не формы символов в рамках одной языковой системы.

normalizer_normalize

Приводит строку к одной из форм нормализации Unicode (NFC, NFD и др.). Актуально для унификации текста перед сравнением или хранением, особенно для языков с диакритическими знаками.

mb_convert_kana предпочтительна именно для работы с японской письменностью, тогда как остальные функции имеют более общее назначение.

Типичные ошибки

Некорректная кодировка

Если не указать правильную кодировку для строки, функция может вернуть искаженный результат или пустую строку.

$str = "ABC"; // Символы в UTF-8
// Указание неверной кодировки
$result = mb_convert_kana($str, 'a', 'ASCII');
echo $result;
(пустая строка или мусор)
Использование неверных флагов

Указание флагов, не соответствующих содержимому строки, может не дать ожидаемого эффекта.

$str = "ABC"; // Обычные латинские символы
$result = mb_convert_kana($str, 'k'); // Флаг для катаканы
echo $result; // Строка не изменится
ABC
Неправильный порядок флагов

Хотя порядок флагов в строке $mode обычно не влияет на результат, логика преобразования может быть неочевидной при комбинации взаимоисключающих флагов.

Изменения в новых версиях PHP

В PHP 8.0 функция mb_convert_kana стала более строгой в отношении типов передаваемых аргументов. Попытка передать значение типа, отличного от строки, для аргументов $string или $mode вызовет фатальную ошибку TypeError.

В PHP 8.1 и 8.2 значительных изменений в работе функции не было. Функция сохраняет обратную совместимость.

Расширенные примеры

Обработка пользовательского ввода

Нормализация данных формы, где пользователь может вводить текст в смешанной форме.

Пример php
$userInput = " Hello 123 コンニチハ ";
// Убираем пробелы, преобразуем латиницу и цифры в полуwidth,
// катакану в полныеwidth
$normalized = mb_convert_kana(trim($userInput), 'aKs');
echo $normalized;
Hello 123 コンニチハ
Подготовка строк для поиска

Приведение строк к единому формату для сравнения или поиска по базе данных.

Пример php
$searchTerm = "カタカナ";
$dbTerm = "カタカナ";
// Преобразуем введенный термин в полныеwidth катакану
$normalizedSearch = mb_convert_kana($searchTerm, 'K');
// Сравниваем
if ($normalizedSearch === $dbTerm) {
    echo 'Найдено совпадение';
}
Найдено совпадение
Преобразование с удалением голосовых знаков

Использование флага V для упрощения символов.

Пример php
$str = "がばづぱ";
$result = mb_convert_kana($str, 'cV');
// Преобразуем хирагану в катакану и удаляем голосовые знаки
echo $result;
カハツハ
Работа с разными кодировками

Явное указание кодировки для строки.

Пример php
$str = mb_convert_encoding("ABC", 'SJIS', 'UTF-8');
// Работаем со строкой в SJIS
$result = mb_convert_kana($str, 'a', 'SJIS');
// Конвертируем результат обратно в UTF-8 для вывода
$resultUtf8 = mb_convert_encoding($result, 'UTF-8', 'SJIS');
echo $resultUtf8;
ABC

Аналоги в других языках

Mb convert kana в Python

Модуль unicodedata предоставляет функцию normalize() для нормализации Unicode. Прямого аналога mb_convert_kana в стандартной библиотеке нет, но можно использовать библиотеку mojimoji.

import mojimoji
result = mojimoji.han_to_zen("ABC 123")
print(result)
ABC 123

Mb convert kana в Javascript

В JavaScript нет встроенной функции для таких преобразований. Обычно используют библиотеки, например, wanakana для преобразования между хираганой, катаканой и ромадзи.

// Использование библиотеки wanakana
import wanakana from 'wanakana';
const result = wanakana.toKatakana('あいうえお');
console.log(result);
アイウエオ

Mb convert kana в MySQL

В MySQL функция CONVERT() меняет кодировку, но не форму символов. Для преобразования ширины символов японского языка прямого аналога не существует. Преобразования обычно выполняются на уровне приложения.

PHP mb_convert_kana function comments

En
Mb convert kana Convert "kana" one from another ("zen-kaku", "han-kaku" and more)