Разбить строку с разделителями с кодом ASCII до 32

Можно ли использовать в функциях разнесения/разрыва разделители с кодом ASCII меньше 32?

Я имею в виду что-то вроде

$v = explode(chr(29), $string)

or

$v = explode(chr(8), $string)

Я пробовал серьезные способы, но у меня всегда была ошибка

implode(): переданы недопустимые аргументы

Как мне это сделать, если это возможно?

Я работаю в программе PHP с запросом URL-адреса: http://192.168.xxx.xxx/?city=22&street=11, который возвращает строку в формате HTML с разделителями.

Что-то вроде name=John&age=32&gender=male, но с chr(9) и chr(31) в местах '=' и '&'. Как я могу взорваться, например, с помощью chr(9) или chr(31)?

Я хочу, чтобы эти разделители были в символьном коде меньше 32, чтобы избежать ошибок с символами, которые можно получить на клавиатуре, поэтому идея состоит в том, чтобы использовать коды символов меньше chr (32).


person Rogério Marques    schedule 15.12.2019    source источник
comment
Можете ли вы опубликовать реальный пример, который воспроизводит вашу ошибку, чтобы другие могли ее проверить.   -  person Nigel Ren    schedule 15.12.2019
comment
Вместо этого вы можете изучить URL-кодирование данных - stackoverflow.com/questions/4744888/.   -  person Nigel Ren    schedule 15.12.2019


Ответы (1)


Кажется, я нашел решение...

function str2array($orig = null)
    {
    $arr = $dta = [];
    $val = null;
    if(ord(substr($orig, -1)) != 31) $orig .= chr(31);
    while(strlen($orig))
        {
        $byte = $orig[0];
        if(ord($byte) == 8)
            {
            $dta[0] = $val;
            $val = null;
            }
        elseif(ord($byte) == 31)
            {
            $dta[1] = $val;
            $arr[$dta[0]] = $dta[1];
            $val = null;
            $dta = [];
            }
        else $val .= $byte;
        $orig = substr($orig, 1);
        };
    return $arr;
    };
person Rogério Marques    schedule 16.12.2019