Головна »»» Web »»» PHP

mb_substr utf-8 не працює

Всі ми чудово знаємо функцію mb_substr яка повинна була б дружити з мультибайтовим кодуванням рядків і виконувати виділення підрядка з рядка. Але часто дана функція некоректно працює:

mb_substr($string,$start,$length,'UTF-8')

mb_internal_encoding - також їй не допоможе

/* Внутрішнє кодування в UTF-8 */
mb_internal_encoding("UTF-8");

на локалхості під ОС Windows може допомогти таке безглузда операція як:

$str = iconv('UTF-8','UTF-8', $str); 

Не смійтесь - дійсно допомагає. І це перевірено, коли всюди кодування UTF-8 без BOM а функція mb_substr лагає - це може допомогти.

На моєму сервері дана функція працювала по аналогії до substr - тобто байт половинила і виходили різні спецсимволи. Вирішення даної проблеми просте - перетворюємо з UTF-8 у windows-1251, використовуємо substr і далі конвертуємо назад в UTF-8

Код який можна додати в свій клас:

 public function dr_substr($str, $start, $length )
 {
 $str = iconv('UTF-8','windows-1251', $str); 
 $str = substr($str, $start, $length); 
 $str = iconv('windows-1251','UTF-8',$str ); 
 return $str; 
 }

Звичайно його можна розширити і зробити універсальним для усіх кодувань =)

 
15.07.2013
1868 переглядів