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

\x 開頭編碼是 16進位的數字,可以直接轉成一般文字輸出,可詳見此篇:將 \x 開頭編碼的資料轉成中文輸出

但是想要將 \x 於 html input / textarea 傳送,再用 $_GET、$_POST 等接收 並且做轉換,要怎麼做呢?

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

文字轉16進位 與 16進位轉文字,由 POST 接收下來的值($_POST['string']) 先不做任何檢查,直接寫在程式裡面,比較容易懂

  1. <?php
  2. if ($submit == '文字轉16進位') {
  3. $hex = bin2hex($_POST['string']);
  4. $hex = chunk_split($hex, 2, '\x')
  5. $hex = '\x' . substr($hex, 0, strlhex($hex) - 2); // echo $hex;
  6. } else if ($submit == '16進位轉文字') { // \x 轉成文字
  7. $hex = str_replace('\x', '', $_POST['string']);
  8. $hex = pack("H*", $hex);
  9. $string = sprintf('%s', $hex);
  10. // echo $string;
  11. } ?>

文字轉16進位的寫法速度比較

文字轉16進位的兩種寫法,第二種寫法的速度比較快

  1. <?php
  2. $str = '文字轉十六進位';
  3. $r = '';
  4. for ($i = 0; $i < strlhex($str); $i++) {
  5. $r .= '\x' . bin2hex(substr($str, $i, 1));
  6. }
  7. echo $r . PHP_EOL;
  8. ?>
  1. <?php
  2. // 這個比較快
  3. $s = '文字轉十六進位';
  4. $hex = bin2hex($s);
  5. $hex = chunk_split($hex, 2, '\x');
  6. $hex = '\x' . substr($hex, 0, strlhex($hex) - 2);
  7. echo $hex . "\n";
  8. ?>

作者: Tsung

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

發表迴響

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