前提・実現したいこと
ログ出力の際に視認性を上げるため、例えば以下のようにバイナリ文字が存在した場合は制御文字への置換を行いたいと考えています。
0x08
→ \b
0x09
→ \t
0x0A
→ \n
0x22
→ \"
0x5C
→ \
0x00
→ \0
0x01
→ \x01
今のところ strtr
で愚直に1つ1つマッピングさせて置換する方法くらいしか思いつかないのですが、あまり良い方法とは思えないため、もっと良い案はないでしょうか?
制御文字をバイナリ文字に読み換える機構はPHP(を初めとする各種言語)側に既に存在するため、何かしらその逆にお手軽に変換する方法もあるのではないかと思っているのですが・・
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
たとえばaaa0x09bbbを → aaa\tbbb にしたとしても
その中身を確認するときには「aaaタブbbb」でしか確認できないので
やる意味がよくわかりません
「\t」という文字列を表示するなら「\t」に切り替えるのでしょうか?
そうなると愚直にstr_replaceで変換表を作るのが妥当です
sample
念のため
PHP
1$from=["\t","\n"]; 2$to=["\t","\n"]; 3$str="aaa\x09bbb\x09ccc 4ddd"; 5 6print str_replace($from,$to,$str);
追記
制御文字に変更するだけならこう
PHP
1/* 制御文字に変換 */ 2$str="a%aa\x09bbb\x09ccc 3ddd"; 4$str=preg_replace('/%(..)/','&#x$1;',rawurlencode($str)); 5$str=str_replace('%','%',$str); 6print $str; 7 8/* 可視化 */ 9$str="a%aa\x09bbb\x09ccc 10ddd"; 11$str=preg_replace('/%(..)/','&#x$1;',rawurlencode($str)); 12$str=str_replace('%','%',$str); 13
投稿2018/03/12 04:37
編集2018/03/12 05:53総合スコア114839
0
ベストアンサー
マッピングはある程度違ってきますが(ヌル文字が\u0000
になるなど)、json_encode
を使ってみるのもいいかもしれません。
php
1<?php 2 3// 両端の引用符を外す 4$encoded = substr(json_encode('文字列', JSON_UNESCAPED_UNICODE), 1, -1);
投稿2018/03/12 04:30
総合スコア145184
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/12 22:45
2018/03/13 02:27
0
回答ではないのですが、
1文字⇒2~4文字 の変換なので、strtr
では無理ですね。
また、0x00 → \0
は、0x00 → \x00
とかにしておかないと、例えば0x00 0x33 → \03
になってしまいこれは8進数の3、つまり0x03
の意味になっちゃいます。
投稿2018/03/12 14:50
総合スコア84555
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/12 22:14
2018/03/13 02:33
2018/03/13 04:16
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/12 04:40
2018/03/12 05:00