ФорумПрограммированиеPHP для идиотов → строка как последовательность байтов.

строка как последовательность байтов.

  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 20 августа 2009 г. 5:50

    Есть строка в UTF8 (или CP1251). Хочу читать из нее не символы АБВГДЕЁЖЗ и т.п. а байты. Соответственно ищу функцию, которая бы позволила это сделать…
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 20 августа 2009 г. 6:03, спустя 12 минут 50 секунд

    bin2hex() =)
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 16:06, спустя 2 дня 10 часов 3 минуты

    Что-то типа того должно быть… только с юникодом не знаю как будет себя вести

    $length = strlen($str);
    for ($i=0; $i < $length; $i++) {
    $tmp = dechex(ord(substr($str, $i, 1)));
    if (strlen($tmp) == 1) $tmp = "0".$tmp; // добавляем ведущий ноль, если нужно
    $hex .= $tmp;
    }
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 16:23, спустя 16 минут 5 секунд

    KENDO, какой ужас =))

    $str = "авбгдежзи ..";
    $hexstr = str_replace("%","",urlencode($str));
    Спустя 6 сек.
    нанах в хеад
    Сапожник без сапог
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 16:38, спустя 15 минут 51 секунду

    Я так из файла читал года два назад. Повторное использование кода, да…
    А вообще, [man]urlencode[/man] говорит нам:
    Returns a string in which all non-alphanumeric characters except -_. have been replaced with a percent (%) sign…
    т.е.символы "-_." останутся :p
    Спустя 168 сек.
    Ну лан… продолжаю идею дуда, можно извратиться

    $str = "авбгдежзи ..";
    $hexstr = str_replace("%","",urlencode($str));
    $hexstr = str_replace("-","код тире",$str));
    $hexstr = str_replace("_","код underscape",$str));
    $hexstr = str_replace(".","код точки",$str));
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 16:42, спустя 3 минуты 51 секунду

    KENDO, а ну про инглишь я забыл конечно, сори я спиздел
    Сапожник без сапог
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 27 августа 2009 г. 6:54, спустя 4 дня 14 часов 11 минут

    а че bin2hex не рулит? Мне он вроде нормальную последовательность выдает =)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 7:09, спустя 14 минут 53 секунды


    <?php

    $str = 'Говно вопрос';

    for ($i = 0, $n = strlen($str); $i < $n; ++$i)
    {
    $byte = substr($str, $i, 1);
    echo ord($byte).' ';
    }

    в случае win-1251
    195 238 226 237 238 32 226 238 239 240 238 241
    в случае utf-8
    208 147 208 190 208 178 208 189 208 190 32 208 178 208 190 208 191 209 128 208 190 209 129
    Спустя 196 сек.
    ну или так:

    <?php

    $str = 'Говно вопрос';

    for ($i = 0, $n = strlen($str); $i < $n; ++$i)
    {
    $byte = substr($str, $i, 1);
    printf('%02x ', ord($byte));
    }

    echo "<br />\n".bin2hex($str);
    ιιlllιlllι унц-унц
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 27 августа 2009 г. 7:09, спустя 5 секунд

    ага, а потом надо в шестнадцатиричную систему счисления перевести :)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 7:27, спустя 18 минут 18 секунд

    ты хорошо видишь?
    или вот так

    <?php

    $str = 'Говно вопрос';

    foreach (str_split($str) as $byte)
    printf('%02x ', ord($byte));

    вобщем учи матчасть - большая часть функций php НЕмультибайтная, тебе только на руку
    ιιlllιlllι унц-унц
  • Batler

    Сообщения: 142 Репутация: N Группа: Кто попало

    Spritz 27 августа 2009 г. 8:12, спустя 44 минуты 38 секунд

    Ты отредактировал пост раньше чем я запостил.
    Про MB поддержку знаю. Матчасть - в курсе.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!