It took me a while to figure this one out, but here is a nice way to use preg_replace to convert a hex encoded string back to clear text
$text = "PHP rocks!";
$encoded = preg_replace("'(.)'e","dechex(ord('\\1'))",$text);
print "ENCODED: $encoded\n";
?>
results in ENCODED: 50485020726f636b7321
print "DECODED:
".preg_replace("'([\S,\d]{2})'e","chr(hexdec('\\1'))",$encoded)."\n";
?>
results in DECODED: PHP rocks!