全角スペースと半角スペースのtrim - PHPプロ!Q&A掲示板

411

  • 0P

全角スペースと半角スペースのtrim

質問日時 / 2007年3月13日 14:33    回答数 / 2件

Questioner:  hyuga  このエントリーをはてなブックマークに追加 

キーワード / utf    preg_replace   

文字列の先頭と末尾に連続した半角スペースと全角スペースがあったとき
それを取り除くために、以下のようなコードを書きましたが
場合によってうまくいきませんでした。
PHPソースコードの文字列や扱う文字列データはUTF-8です。

$before = "      漢字   ";  // <- 全角スペースや半角スペースが混ざってる
$after = preg_replace('/^[  ]*(.*?)[  ]*$/', '$1', $before);

上の場合はうまくいくのですが、

$before = "      ひらがな   ";

だと、1文字目の「ひ」が文字化けしてしまいます。
$beforeがひらがなやカタカナだと文字化けしてしまうようです。

なにか書き方が間違っているのでしょうか。
よろしくお願いします。

OSはFedoraCore6
PHPは5.2.1です。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01weekendphp上記コードをEUC-JPで走らせたところ、問題なく、動作
 ┗A01-1hyugaどうもありがとうございます! パターン修飾子「u」

回答一覧

並び替え:

A01 満足
answererweekendphp [3月13日 18:10] (最終編集:3月13日 18:12)

上記コードをEUC-JPで走らせたところ、問題なく、動作しましたが、
UTF-8で行うと、文字化けしました。

  1. $after = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $before);
のようにuオプションをつけることにより、問題なく動作しましたが、
いかがでしょうか。

なお、パターン修飾子については
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
でご確認ください。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerhyuga [3月14日 02:10]

どうもありがとうございます!
パターン修飾子「u」で無事に解決できました。
weekendphpさんのご好意に大変感謝しています。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)