mb_strwidth
funkcja
Zwraca szerokość wyświetlania ciągu w kolumnach terminala. Znaki CJK (chiński, japoński, koreański) liczone jako 2.
mb_strwidth(string $string, ?string $encoding = null): int
mb_strwidth oblicza szerokość ciągu mierzoną w kolumnach terminala, a nie w bajtach ani znakach. Znaki ASCII i łacińskie (w tym polskie) zajmują 1 kolumnę, natomiast znaki CJK (chiński, japoński, koreański) zajmują 2 kolumny, ponieważ są szersze w czcionkach o stałej szerokości. Przydatne przy formatowaniu tabel na konsolę.
<?php
declare(strict_types=1);
echo mb_strwidth('Łódź', 'UTF-8'); // wynik: 4 (każdy znak = 1 kolumna)
echo mb_strwidth('abc', 'UTF-8'); // wynik: 3
// Znaki CJK zajmują 2 kolumny:
echo mb_strwidth('日本語', 'UTF-8'); // wynik: 6 (3 znaki × 2 kolumny)
// mb_strlen vs mb_strwidth:
$s = '日本語';
echo mb_strlen($s); // wynik: 3 (znaki)
echo mb_strwidth($s); // wynik: 6 (kolumny terminala)
Dla polskich tekstów wynik mb_strwidth będzie równy wynikowi mb_strlen, bo polskie litery są jednoszerokie. Różnica ujawnia się dopiero przy mieszaniu skryptów łacińskich z CJK.