PHPのtrimって、全角の空白(スペース)は削除してくれないのですか?
PHPのtrimって、全角の空白は削除してくれないのですか?
てっきり削除してくれると思っていました ( ̄◆ ̄;)
(削除してくれても、いいと思いますが・・・)
てっきり削除してくれると思っていました ( ̄◆ ̄;)
(削除してくれても、いいと思いますが・・・)
で、文字列の前後にある(全角、半角の)空白(スペース)を削除する方法を調べていたのですが、
最初に見つけたのは、
$str = " あいうえお "; // 前後に(全角、半角の)空白があります。
$str = trim($str);
$str = trim($str, " "); // 第2引数は全角空白です。
print $str;
という方法。
つまり、
1回目のtrimで半角空白(スペース)を削除し、
2回目のtrimでは、第2引数で全角空白(スペース)を指定して、全角空白(スペース)を削除する。
(trimは、第2引数で削除する文字を指定することができるのですね。知りませんでした。)
これなら簡単だな~と思い、作ってみたのですが、
削除してくれない時があるのですが (;´д`)トホホ…
いろいと調べたら、
第2引数に、全角文字を書くと誤動作するとのこと。
しょうがないので、作ってみてのが以下のコード(ファイルはUTF-8です)
$str = " あいうえお "; // 前後に(全角、半角の)空白があります。
$str = preg_replace("/^[ ]+/u","",$str); // []の中は、半角空白1文字と全角空白1文字です。
$str = preg_replace("/[ ]+$/u","",$str); // []の中は、半角空白1文字と全角空白1文字です。
print $str;
^は、^の次に指定された文字列で始まっていれば、パターンにマッチしたと判断します。
$は、$の前に指定された文字列で終わっていれば、パターンにマッチしたと判断します。
+は、+の前に指定された文字が1つ以上使われている場合、パターンにマッチしたと判断します。
つまり、
1回目のpreg_replaceでは、先頭に[ ]内にある文字(半角空白か全角空白)が1つ以上あれば、空文字に置き換えられます。
2回目のpreg_replaceでは、最後に[ ]内にある文字(半角空白か全角空白)が1つ以上あれば、空文字に置き換えられます。
1回のpreg_replaceでも可能だとは思いますが、
今の私では、この正規表現がせいいっぱい。
<サンプル>
http://tools.on.coocan.jp/sample/trim/trim.php
<サンプルのソース>
<?php
$str = " あいうえお "; // 前後に(全角、半角の)空白があります。
// ※[]の中は、半角空白1文字と全角空白1文字です。
$str = preg_replace("/^[ ]+/u","",$str);
$str = preg_replace("/[ ]+$/u","",$str);
// ヘッダーを返します。
print "<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>全角も削除するtrimのサンプル</title>
</head>
<body>";
// trim後の文字列を返します。
print "「".$str."」";
//フッターを返します。
print "</body>
</html>";
?>
なお、環境はphp5.2.6(レンタルサーバーなのでOSはわかりません)です。
次のサイトを参考にさせていただきました。
(trimの第2引数に全角空白を指定する方法を載せていたサイトではありません)
http://www.scollabo.com/banban/php/php_15.html
http://www.phppro.jp/qa/411?sort=desc
http://q.hatena.ne.jp/1120051131
ありがとうございました。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- またやってしまった。(phpでの比較演算時のミス)(2008.09.20)
- 「ホームーページの外部リンク先~ソフト」を改良しました。(2008.12.09)
- PHPのtrimって、全角の空白(スペース)は削除してくれないのですか?(2008.10.05)
- Lunascape5 Alphaをインストールしました。(2008.12.07)
- フレームアクションに書いたSelection.setFocusは、ムービープレビューでは動作しない?(2008.12.06)




コメント