Xpoint
   [напомнить пароль]

Определение длины строки в байтах

Метки: [без меток]
2011-02-24 16:19:42 [обр] tcolonel[досье]

Доброго времени суток всем, уважаемые гуру, подскажите как с помощью PHP подсчитать длину строки в байтах независимо от кодировки?

Offtop:

<?
    $str_1 = 'Привет как дела';
    $str_2 = 'Privet kak dela';
    dm(strlen($str_1), false, 'str_1'); - выдает 15
    dm(strlen($str_2), false, 'str_2'); - выдает 15
    dm(mb_strlen($str_1), false, 'mb_str_1'); - выдает 15
    dm(mb_strlen($str_2), false, 'mb_str_2'); - выдает 15
?>
<script language="javascript">
   var str_1 = '<?=$str_1;?>';
   var str_2 = '<?=$str_2;?>';
   alert('str_1 = ' + encodeURIComponent(str_1).replace(/%../g, 'x').length + '\r\nstr_2 = ' + encodeURIComponent(str_2).replace(/%../g, 'x').length); - выдает str_1 = 28, str_2 = 15
</script>

Спасибо за внимание.

спустя 2 часа 3 минуты [обр] L&L(3/3)[досье]
Сохраните файл в кодиповке UTF-8 или перекодируйте только строковую переменную
  $str_1=iconv("Windows-1251","UTF-8",$str_1);
и будет длина 28
спустя 1 месяц 4 дня [обр] Давид Мзареулян(536/1003)[досье]
Автор, у Вас каша в голове. Фраза «длина строки в байтах, независимо от кодировки» не имеет смысла, потому что кодировка по определению — способ перевода строки в байты и наоборот. Так что Вы определитесь, что Вам НА САМОМ ДЕЛЕ надо и задайте вопрос соответственно.
спустя 26 минут [обр] tcolonel[досье]
Давид Мзареулян[досье] Доброго времени суток. Возможно после прочтения этого материала для Вас появится смысл во фразе и Вы поймете о чем я говорил и о чем спрашивал ...
спустя 23 часа [обр] Прокаев2(13/35)[досье]

https://developer.mozilla.org/......bal_Objects/encodeURIComponent работает с utf-8

этот код должен работать аналогично http://www.php.net/manual/en/function.rawurlencode.php#100313
сам не проверял

спустя 10 дней [обр] Hopter(0/7)[досье]

tcolonel[досье], возможно, я что-то неправильно понял в вашем вопросе, но strlen() выдает длину строки именно в байтах, а не в символах. В описании сказано, что в символах, потому что в области применения этих функций символ кодируется одним байтом. Поэтому, собственно, и существуют функции mb_?????() для работы со строками в мультибайтной кодировке символов.

JavaScript хранит строки в юникоде вне зависимости от содержимого строки и, кстати, не предоставляет функций для выяснения объема чего бы то ни было в байтах. Но Вы нашли способ вычислить то, что Вам надо, хотя и не то, что Вы спрашивали (не длину этой строки в байтах, а размер буфера в байтах для хранения этой строки в UTF-8 ;) ).

P.S. tcolonel[досье], Вас ждет еще много сюрпризов на стезе формирования SMS вручную...

спустя 9 часов [обр] tcolonel[досье]
Hopter[досье] Может быть тогда поделитесь опытом?
Powered by POEM™ Engine Copyright © 2002-2005