Как strlen многоязычной строки - PullRequest
3 голосов
/ 13 февраля 2012

Я хочу получить strlen () из Shift-jis и Utf-8, а затем сравнить их.Строка может быть смешана "あ あ 12345678sdfdszzz".Я пытался использовать strlen, но он дает разные результаты.mb_strlen также не помогает, потому что это смешанная строка.

Например:

ああ12345678 >> strlen() = 24 chars
ああああああああああああああああ >> strlen() = 48 chars
ああああああああああああああああああ >> strlen() = 54 chars

Кажется, что правила не существует.Итак, , как лучше всего рассчитать strlen и сравнить их в мультиязычном ?

Ответы [ 3 ]

6 голосов
/ 13 февраля 2012

strlen учитывает только байты и, следовательно, полезно только для однобайтовых кодировок символов ;используйте mb_strlen для многобайтовых кодировок , которые вместо этого могут считать действительные символы.

2 голосов
/ 13 февраля 2012

Я бы написал функцию для проверки, откуда и где существует конкретная кодировка.

Тогда я бы разбил строку на кодировки, выполнил mb_strlen и суммировал размеры после слов. Затем повторите на второй строке и сравните.

Полагаю, вы понимаете мою мысль;)

PS: использовать mb_detect_encoding для обнаружения кодировки

mb_detect_encoding (дальнейшие идеи сообщества php см. В комментариях)

0 голосов
/ 15 ноября 2014
$field = $_POST['field'];
$field_length = mb_strlen($field,'utf-8');
...