Итак, у меня есть строка в кодировке UTF-8, которая может содержать кандзи полной ширины, кана полной ширины, кана полуширины, ромадзи, цифры или японские символы каваий, такие как ★ или ♥.
Если я хочу использовать длину, я использую mb_strlen()
, и каждый из них считается равным 1. Что хорошо для большинства целей.
Но меня (японский клиент) попросили считать кана только половинной ширины как 0,5 (с целью максимальной длины текстового поля), потому что, очевидно, именно так японские веб-сайты делают это. Я делаю это, используя mb_strwidth()
, который считает полную ширину как 2, а половинную ширину как 1, затем я делю на 2.
Однако этот метод также считает символы ромадзи как 1, так что что-то вроде Chocアイス
будет считаться как 7 ... тогда я разделю на 2 для учета иероглифов и получу 3,5. но на самом деле я хочу 5,5 (4 для ромадзи + 1,5 для 3 половинной каны).
// РЕДАКТИРОВАТЬ:
Еще немного информации: любой символ (даже не кана), имеющий целые и половину, должен быть 1 для полной ширины и 0,5 для полуширины. например, такие символы, как ¥、3@(
, должны быть равны 1, а такие символы, как ¥,3@(
, должны быть равны 0,5
.
// ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: символы типа ☆ и ♥ должны быть равны 1, но метод mb_strwidth / 2 возвращает их как 0,5
Существует ли стандартный способ подсчета длины строки в японских системах?
Или все просто зацикливаются на своих строках и подсчитывают символы, которые не соответствуют стандартным правилам ширины?