PHP で文字列内から制御文字を削除するサンプルコード。正規表現で制御文字を削っている。
$ cat metachars.php
<?php
$metachars = [
"tab " => "\t",
"newline " => "\n",
"back space " => "\x08"
];
echo("そのまま出力\n");
foreach($metachars as $key => $val){
echo("${key}: AAA${val}BBB\n");
}
echo("\n");
echo("正規表現でPOSIX文字クラスを使って制御文字を削除\n");
foreach($metachars as $key => $val){
echo(preg_replace('/[[:cntrl:]]/', '', "${key}: AAA${val}BBB") . "\n");
}
echo("\n");
echo("正規表現で否定先読みを使ってタブと改行以外の制御文字を削除\n");
foreach($metachars as $key => $val){
echo(preg_replace('/(?!(\t|\n))[[:cntrl:]]/', '', "${key}: AAA${val}BBB") ."\n");
}
echo("\n");
実行結果。
$ php metachars.php
そのまま出力
tab : AAA BBB
newline : AAA
BBB
back space : AABBB
正規表現でPOSIX文字クラスを使って制御文字を削除
tab : AAABBB
newline : AAABBB
back space : AAABBB
正規表現で否定先読みを使ってタブと改行以外の制御文字を削除
tab : AAA BBB
newline : AAA
BBB
back space : AAABBB
バックスペースの制御文字を野放しにすると、文字列を連結したときに前の文字を削ってしまう。外部からの入力でこんなのがあったら危険なので、必要に応じて削除する必要がある。
今回の環境: Debian GNU/Linux jessie + PHP 5.6
$ uname -mrsv
Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-1 (2016-03-06) x86_64
$ php -v
PHP 5.6.20-0+deb8u1 (cli) (built: Apr 27 2016 11:26:05)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
コンピューティングと電気通信において、制御文字(せいぎょもじ、英語: control character)とは、文字コードの規格で定義される文字のうち、ディスプレイ・プリンター・通信装置などに対して、特別な動作(制御)をさせるために使う文字である。制御キャラクタともいい、情報処理用語規格では「制御機能文字」と呼ばれている。
制御文字 - Wikipedia
tags: php
Posted by NI-Lab. (@nilab)