\x 開頭編碼是 16進位的數字,可以直接轉成一般文字輸出,可詳見此篇:將 \x 開頭編碼的資料轉成中文輸出
但是想要將 \x 於 html input / textarea 傳送,再用 $_GET、$_POST 等接收 並且做轉換,要怎麼做呢?
將 \x 開頭編碼的資料使用 HTTP POST 傳送與接收
文字轉16進位 與 16進位轉文字,由 POST 接收下來的值($_POST['string']) 先不做任何檢查,直接寫在程式裡面,比較容易懂
<?php
if ($submit == '文字轉16進位') {
$hex = bin2hex($_POST['string']);
$hex = chunk_split($hex, 2, '\x')
$hex = '\x' . substr($hex, 0, strlhex($hex) - 2); // echo $hex;
} else if ($submit == '16進位轉文字') { // \x 轉成文字
$hex = str_replace('\x', '', $_POST['string']);
$hex = pack("H*", $hex);
$string = sprintf('%s', $hex);
// echo $string;
} ?>
文字轉16進位的寫法速度比較
文字轉16進位的兩種寫法,第二種寫法的速度比較快
<?php
$str = '文字轉十六進位';
$r = '';
for ($i = 0; $i < strlhex($str); $i++) {
$r .= '\x' . bin2hex(substr($str, $i, 1));
}
echo $r . PHP_EOL;
?>
<?php // 這個比較快 $s = '文字轉十六進位'; $hex = bin2hex($s); $hex = chunk_split($hex, 2, '\x'); $hex = '\x' . substr($hex, 0, strlhex($hex) - 2); echo $hex . "\n"; ?>