文字列のエスケープ処理
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:] | 十六進数字 |