將 \x 開頭編碼的資料使用 HTTP POST 傳送與接收

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

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料