コンテンツへスキップ

PHP制御文字と改行削除

文字列のエスケープ処理

PHPでWEB APIを利用していると、制御文字や改行文字を削除(エスケープ)したい場面が出てきます。

  1. 改行文字(x0A x0D)含む制御文字を削除したい場合
  2. 改行文字(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
00NUL空白(Null)^@
01SOHヘッディング開始(Start of Heading)^A
02STXテキスト開始(Start of Text)^B
03ETXテキスト終結(End of Text)^C
04EOT伝送終了(End of Transmission)^D
05ENQ問い合わせ(Enquiry)^E
06ACK肯定応答(Acknowledge)^F
07BELベル(Bell)^G
08BS後退(Backspace)^H
09HT水平タブ(Horizontal Tabulation)^I
0ALF改行(Line Feed)^J
0BVT垂直タブ(Vertical Tabulation)^K
0CFF書式送り(Form Feed)^L
0DCR復帰(Carriage Return)^M
0ESOシフトアウト(Shift Out)^N
0FSIシフトイン(Shift In)^O
10DLE伝送制御拡張(Data Link Escape)^P
11DC1装置制御1(Device Control 1)^Q
12DC2装置制御2(Device Control 2)^R
13DC3装置制御3(Device Control 3)^S
14DC4装置制御4(Device Control 4)^T
15NAK否定応答(Negative Acknowledge)^U
16SYN同期信号(Synchronous Idle)^V
17ETB伝送ブロック終結(End of Transmission Block)^W
18CAN取り消し(Cancel)^X
19EM媒体終結(End of Medium)^Y
1ASUB置換(Substitute Character)^Z
1BESC拡張(Escape)^[
1CFSファイル分離(File Separator)^\
1DGSグループ分離(Group Separator)^]
1ERSレコード分離(Record Separator)^^
1FUSユニット分離(Unit Separator)^_
7FDEL抹消(Delete)^?

[POSIXキャラクタクラス]

クラス名意味
[:alnum:]アルファベットと(十進)数字
[:alpha:]アルファベット
[:blank:]空白文字(スペース、タブ等)
[:cntrl:]制御文字
[:digit:]十進数字
[:graph:]印字可能かつ表示可能な文字(スペースは印字可能だが表示可能ではない)
[:lower:]アルファベットの小文字
[:print:]印字可能なキャラクタ(=制御文字以外のキャラクタ)
[:punct:]句読点(通常の文字、数字、制御文字、スペースのいずれでもないキャラクター)
[:space:]スペース、タブ、改ページ
[:upper:]アルファベットの大文字
[:xdigit:]十六進数字

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA