Должен ли я использовать функции mb_* или iconv_* для многобайтовых строк?

Как и все мы сейчас, обработка многобайтовых строк в PHP не так проста. Например, я хочу получить длину следующей строки: ä

strlen('ä'); // 2, because ä equals 2 bytes
mb_strlen('ä', 'UTF-8'); // 1
iconv_strlen('ä', 'UTF-8'); // 1

Какие функции следует использовать? mb_* или iconv_*? Почему? Учитывая, что кодировка может не ограничиваться UTF-8.

Спасибо заранее!


person Philippe Gerber    schedule 04.07.2009    source источник


Ответы (1)


Взгляните на эту презентацию Powerpoint:

http://www.nyphp.org/content/presentations/smallworld/April2006-nyphp-Presentation.ppt

В двух словах: Iconv поддерживает больше кодировок, но менее переносим.

Из презентации:

PHP поддерживает многобайтность в двух расширениях: iconv и mbstring.

  • iconv использует внешнюю библиотеку (поддерживает больше кодировок, но менее переносима)
  • mbstring имеет библиотеку, связанную с PHP (меньше кодировок, но более переносимая)
person karim79    schedule 04.07.2009
comment
Спасибо! еще один плюс mbstring в том, что существует гораздо больше функций, таких как mb_strtoupper, mb_strtolower и т. д. - person Philippe Gerber; 05.07.2009