HEX&String -> String

toto

Guest
HEX&String -> String

re all.
Сталкнулся с такой проблемой. Написал парсер на пхп для логов апача. Некоторые программы сують в лог наместо русских букв HEX c заголовком ака "\xcb". Переломатил весь инет, но в разумительного решения не нашёл. Если закрыть глаза на производительность, то лог мона переконвертировать с помощью прочтения его пхп скриптом и выводом на экран, тогда все символы выводяться правильно ака "reader.php > log". Но это не правильно по своей сути. С помощью этой функции я добился обратного результата:
PHP:
function strhex($string)
{
   $hex="";
      for ($i=0;$i<strlen($string);$i++)
    #$hex.="\x".dechex(ord($string[$i]));
       $hex.=dechex(ord($string[$i]));
return $hex;
}
какие будуть соображения ?
 

SiMM

Новичок
А какие тебе нужны соображения? Задачу - решил? Чего же боле?
 

toto

Guest
Хе, вроде я правильно описал проблему:
Мне нужен инструмент чтобы HEX&String -> String.

-~{}~ 10.01.05 04:26:

я решил проблему примерно вот таким способом
PHP:
$array = array('\xcb' => 'L');
$string = strtr($string, $array);
не льзя ли на место того чтобы вбивать всю таблицу символов использовать одну функцию ?
 

yaniks

новичок
решение наверное идиотское, но экспромтом получилось такое:
PHP:
function test($CHAR){
  return sprintf("%c",hexdec($CHAR[0]));
}
$STRING='\xcb\xcb\xcf\xcb\xcb\xcb\xcb\xcb';
$STRING1=preg_replace_callback('`\\\x[a-f0-9]{2}`i','test',$STRING);
 

toto

Guest
Вообщем у меня всё получилось:
PHP:
    function request_encode($text){
        $text = $this->hex($text);
        $text = rawurldecode($text);
        $text = addslashes($text);
    return $text;
    }

    function hexstr($hex){
        $string=chr(hexdec($hex[$i].$hex[$i+1]));
    return $string;
    }

    function hex($string){
        $i = 1; $text = "";
        $tok = strtok($string, "\x");
        while ($tok){
            if ($i > 1){
                $text .= $this->hexstr(substr($tok,0,2));
                $text .= substr($tok,2);
            }else{
                $text .= $tok;
            }
            $tok = strtok("\x");
            $i++;
        }
    return $text;
    }
Тока всё стало работать в 3 раза медление, что не есть гуд. У кого есть мысли по оптимизации или другое решение ?
 

SiMM

Новичок
Автор оригинала: toto
я решил проблему примерно вот таким способом
PHP:
$array = array('\xcb' => 'L');
$string = strtr($string, $array);
PHP:
$string = preg_replace('#\\\\x([0-9a-f]{2})#se','chr(hexdec("$1"))',$string);
Только строковые функции должны быть на порядок быстрее, а создать массив циклом тебе ничто не мешает.
 
Сверху