アシアル株式会社主催 開発者向け、一歩先をいくためのテクニカルセミナー

<< CSV表示で文字化け 質問一覧 phpDocumentorの{{{と}}} >>

  • 0P
全角スペースと半角スペースのtrim

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

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

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

$before = "      ひらがな   ";

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

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

OSはFedoraCore6
PHPは5.2.1です。

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

Q全角スペースと半角スペースのtrim hyuga  [03月13日 14時33分] 
┗満開Re:全角スペースと半角スペースのtrim weekendphp  [03月13日 18時10分] 
  ┗Re:Re:全角スペースと半角スペースのtrim hyuga  [03月14日 02時10分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

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

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

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

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

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

なお、パターン修飾子については
http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php
でご確認ください。
CSV表示で文字化け 質問一覧 phpDocumentorの{{{と}}}