[ midgard @ 14.02.2011. 17:10 ] @
Problem je sledeci:

Imam jedan string karaktera, u pitanju je ceo ISO-8859-1, ali tamo gde izbija problem je u ovom delu: !"#$%&'()

Zelim da prebacim taj string karaktera u njihove hexadecimalne vrednosti i imam ovu liniju koda koja to radi:

Code:
<?php
$string = "!\"#$%&'()";

$hex = preg_replace("/(.)/es", "sprintf(' %02X', ord('$1'))", $string);

echo $hex;

?>


Rezultat ovoga bi trebalo da bude u hexadecimalnom obliku:

Code:
21 22 23 24 25 26 27 28 29


medjutim ja dobijam ovo:

Code:
21 5C 23 24 25 26 27 28 29


Problem je u 5C koji je u stvari karakter / odnosno escape.

Zakljucak: umesto hexa kod za karakter " (22) dobio sam hexa kod za karakter / (5C). :(



Daljim mucenjem otkrio sam sledece, kada napisem preg_replace funkciju sa jednostrukim navodnicima umesto sa dvostrukim:

Code:
<?php
$string = "!\"#$%&'()";

$hex = preg_replace('/(.)/es', 'sprintf(" %02X", ord("$1"))', $string);

echo $hex;

?>


Dobijam ovo:

Code:
21 22 23 24 25 26 5C 28 29


Zakljucak: umesto hexa kod za karakter ' (27) dobio sam hexa kod za karakter / (5C). :( :(



Ne mogu da koristim ovako nesto:

Code:
echo hexdec(ord($char));


Jer ovo radi samo sa ASCII, a meni treba full ISO-8859-1.

Nadam se da neko moze da mi pomogne da resim ovo.

Poz
[ Nikola Poša @ 14.02.2011. 19:26 ] @
Probaj bez preg_replace, ovako nešto:
Code:
$string = "!\"#$%&'()";
$hex = '';
for ($i=0; $i<strlen($string); $i++) {
    $hex .= sprintf(' %02X', ord($string[$i]));
}
echo $hex;
[ kiklop74 @ 14.02.2011. 19:54 ] @
Postoji i funkcija bin2hex

[ midgard @ 17.02.2011. 18:07 ] @
Uspeo sam ovako da resim problem:

Code:
<?php

function to_hex($matches) {
  return sprintf(' %02X', ord($matches[1]));
}

echo preg_replace_callback("/(.)/s", "to_hex", "!\"#$%&'()");

?>


@Nikola

Kad stignem probaci i tvoje resenje.

Hvala u svakom slucaju.

Poz