\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"; ?>