文字列のエスケープ処理
PHPでWEB APIを利用していると、制御文字や改行文字を削除(エスケープ)したい場面が出てきます。
- 改行文字(x0A x0D)含む制御文字を削除したい場合
- 改行文字(x0A x0D)は残し制御文字を削除したい場合
1.改行文字を含む制御文字を削除したい場合
x0A Line Feed(改行)およびx0D Carriage Return(復帰)と制御文字を削除したい場合の、PHPコードです。
$string = preg_replace('/[\x00-\x1F\x7F]/','', $string);
改行文字含むコントロール文字は、POSIXキャラクタクラスにおいて [:cntrl:] で定義されており、以下のように記載することも可能です。
$string = preg_replace('/[[:cntrl:]]/', '', $string);
2.改行文字は残し制御文字を削除したい場合
x0A Line Feed(改行)およびx0D Carriage Return(復帰)と制御文字は残し、その他の制御文字を削除する場合の、PHPコードです。
$string = preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $string);
参考にさせて頂いたサイト
Remove control characters from PHP string
[制御文字一覧]
16進 | 略号 | 名称 | CS |
00 | NUL | 空白(Null) | ^@ |
01 | SOH | ヘッディング開始(Start of Heading) | ^A |
02 | STX | テキスト開始(Start of Text) | ^B |
03 | ETX | テキスト終結(End of Text) | ^C |
04 | EOT | 伝送終了(End of Transmission) | ^D |
05 | ENQ | 問い合わせ(Enquiry) | ^E |
06 | ACK | 肯定応答(Acknowledge) | ^F |
07 | BEL | ベル(Bell) | ^G |
08 | BS | 後退(Backspace) | ^H |
09 | HT | 水平タブ(Horizontal Tabulation) | ^I |
0A | LF | 改行(Line Feed) | ^J |
0B | VT | 垂直タブ(Vertical Tabulation) | ^K |
0C | FF | 書式送り(Form Feed) | ^L |
0D | CR | 復帰(Carriage Return) | ^M |
0E | SO | シフトアウト(Shift Out) | ^N |
0F | SI | シフトイン(Shift In) | ^O |
10 | DLE | 伝送制御拡張(Data Link Escape) | ^P |
11 | DC1 | 装置制御1(Device Control 1) | ^Q |
12 | DC2 | 装置制御2(Device Control 2) | ^R |
13 | DC3 | 装置制御3(Device Control 3) | ^S |
14 | DC4 | 装置制御4(Device Control 4) | ^T |
15 | NAK | 否定応答(Negative Acknowledge) | ^U |
16 | SYN | 同期信号(Synchronous Idle) | ^V |
17 | ETB | 伝送ブロック終結(End of Transmission Block) | ^W |
18 | CAN | 取り消し(Cancel) | ^X |
19 | EM | 媒体終結(End of Medium) | ^Y |
1A | SUB | 置換(Substitute Character) | ^Z |
1B | ESC | 拡張(Escape) | ^[ |
1C | FS | ファイル分離(File Separator) | ^\ |
1D | GS | グループ分離(Group Separator) | ^] |
1E | RS | レコード分離(Record Separator) | ^^ |
1F | US | ユニット分離(Unit Separator) | ^_ |
7F | DEL | 抹消(Delete) | ^? |
[POSIXキャラクタクラス]
クラス名 | 意味 |
[:alnum:] | アルファベットと(十進)数字 |
[:alpha:] | アルファベット |
[:blank:] | 空白文字(スペース、タブ等) |
[:cntrl:] | 制御文字 |
[:digit:] | 十進数字 |
[:graph:] | 印字可能かつ表示可能な文字(スペースは印字可能だが表示可能ではない) |
[:lower:] | アルファベットの小文字 |
[:print:] | 印字可能なキャラクタ(=制御文字以外のキャラクタ) |
[:punct:] | 句読点(通常の文字、数字、制御文字、スペースのいずれでもないキャラクター) |
[:space:] | スペース、タブ、改ページ |
[:upper:] | アルファベットの大文字 |
[:xdigit:] | 十六進数字 |