PHP Note 》
文字列操作
created: 2002-11-02 | modified: 2008-03-24
文字の長さを調べたり、特定の文字を置き換えたり、良くやる文字列処理の覚書き。
- 改行コードを得る
- 文字列中の改行コードを <br /> に置き換え
- 文字列中の <br /> を改行コードに置き換え
- 文字列中の改行コードを削除
- 文字列中の改行コードをOSの改行コードに統一
- 最後の文字を削除
- 文字列の始めと終わりの空白文字を削除
- 文字列の終わりの '/' を削除
- HTMLエンティティを元に戻す(htmlspecialcharsの逆)
- 任意のカラム数($len)で文字列を丸める
- magic_quotes_gpcのエスケープ文字を削除する
- ルートからの絶対パスか判定する
改行コードを得る
改行コードの自動変換機能を持ったFTPクライアントと併用すれば、OS の改行コードが必要な時に OS の違いを気にせずに済みます。
function cr ()
{
return "
"; // ↑ココの改行コードを返す
}
文字列中の改行コードを <br /> に置き換え
$str = str_replace(array("\r\n","\r","\n"), '<br />', $str);
str_replace: 特定の文字を別の文字に置き換える
文字列中の <br /> を改行コードに置き換え
$str = str_replace(array('<br />','<br>'), "\n", $str);
文字列中の改行コードを削除
$str = str_replace(array("\r\n","\r","\n"), '', $str);
特定の文字を削除することは、特定の文字を ''(空の文字列)に置き換えることと同じ
文字列中の改行コードをOSの改行コードに統一
$str = str_replace(array("\r\n","\r","\n"), PHP_EOL, $str);
PHP_EOL は OSの改行コードを示す定数。ユーザから得たテキストの改行コード統一に。
最後の文字を削除
$str = '/php/'; $str = substr($str, 0, -1); // $str: '/php'
substr:開始位置とバイト数を指定して文字列の一部を得る。
第2引数が開始位置、第3引数はバイト数。マイナスの場合は後ろからのバイト数なので、文字列のはじめから最後の一文字の手前までが得られる。
文字列の始めと終わりの空白文字を削除
$str = ' /php/ '; $str = trim($str); // $str: '/php/'
trim:
空白文字は \n \r \t \0 \x0B の4つ。第2引数にて削除する文字を複数指定可能。空白以外の文字も指定できる。ユーザから得たテキストの余分な空白削除に。
文字列の終わりの '/' を削除
$str = '/php//'; $str = rtrim($str, '/'); // $str: '/php'
rtrim:
trim と違って始めの文字は削除対象外。第2引数が無ければ trim 同様空白文字を削除するが、第2引数が指定されてるので '/' を削除した文字を返す。ディレクトリの書式統一に。
HTMLエンティティを元に戻す(htmlspecialcharsの逆)
function unhtmlspecialchars ( $str )
{
$entry = array_flip(get_html_translation_table(HTML_SPECIALCHARS));
return strtr($str, $entry);
}
PHP5 には htmlspecialchars_decode が実装されました。
任意のカラム数($len)で文字列を丸める
$str = mb_strimwidth($str, 0, $len);
magic_quotes_gpcのエスケープ文字を削除する(PHP5)
// コールバック用関数
function _callback_stripSlashes ( &$val, $key )
{
$val = stripslashes($val);
}
// 実行関数
function stripQuotesGpc ()
{
if (get_magic_quotes_gpc()) {
if (count($_GET)) {
array_walk_recursive($_GET ,'_callback_stripSlashes');
}
if (count($_POST)) {
array_walk_recursive($_POST ,'_callback_stripSlashes');
}
if (count($_COOKIE)) {
array_walk_recursive($_COOKIE ,'_callback_stripSlashes');
}
}
}
array_walk_recursive はPHP5から実装された為、PHP4環境ではマニュアルのサンプルコードを手本に自前で array_walk_recursive を実装すれば使えます。
ルートからの絶対パスか判定する
function is_rootpath ( $path )
{
if ('/' == $path{0} || ':' == $path{1}) {
return true;
}
return false;
}
PHP Note 》
