phpで”<>”で囲まれた文字列と改行と半角スペースを取り除くやり方を教えてください。


xxxx<yyyyyyy yyyyy>z
zz zz

xxxxzzzzz

に変換するやり方です。

回答の条件
  • 1人2回まで
  • 登録:2006/11/29 19:44:11
  • 終了:2006/11/30 01:32:11

ベストアンサー

id:nakamuraaaaa No.7

nakamura回答回数7ベストアンサー獲得回数22006/11/30 00:12:16

ポイント40pt

readfile()は入力ファイルを標準出力してしまうので

$str1 = readfile("http://xx.com/xx.txt");

としても$str1には文字列が格納されません。

正確には関数内で標準出力に入力ファイルの内容を出力後、戻り値としてファイルから読み込んだバイト数を返します。

参考:http://www.php.net/manual/ja/function.readfile.php


もし読み込むファイルがスクリプトと同じサーバ内ならfopenで読み込めばよいです。

同一サーバでなくHTTPでアクセスしたい場合は以下のスクリプトで標準出力をバッファリングすることでPHPの変数に格納し、置換処理を実現できます。

※ob_start()からob_end_clean();までが重要。

<?php

ob_start();

readfile("http://xx.com/xx.txt");

$str = ob_get_contents();

ob_end_clean();

$str = preg_replace("/<.*>|\r\n|\s/", "", $str);

//必要であれば適切なエンコーディングを実行

//print mb_convert_encoding($str,'UTF-8','SJIS');

print $str;

?>

id:kanshizm

できました~~、ありがとうございました。

2006/11/30 01:30:32

その他の回答(6件)

id:tobeoscontinue No.1

tobeoscontinue回答回数214ベストアンサー獲得回数542006/11/29 20:35:36

ポイント20pt

preg_replaceを使ってみてはどうでしょう。

<?php

$data = "xxxx<yyyyyyy yyyyy>z\nzz zz";

echo preg_replace("/(<.+>)|\n|\s/", NULL, $data);

?>

タグで囲まれた文字列に何かもっと制限がある場合は.+の部分を変える必要があります。

id:mugenkoubou No.2

mugenkoubou回答回数10ベストアンサー獲得回数02006/11/29 20:37:33

ポイント20pt

こんな感じでどうでしょうか?

$str = 'xxxx<yyyyyyy yyyyy>z
zz zz';

$replaced = preg_replace('/(<([^<>]+)>|[\s])/', '', $str);
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012006/11/29 20:38:03

ポイント20pt

$a に元の文字列が入っていて

$b に置換後の文字列を入れるとすると、

$b = preg_replace("/<.*>|\s|\r|\n/", "", $a);


もしお望みの結果にならなかった場合は

$a に元の文字列が入っていて

$e に置換後の文字列を入れるとすると、

$b = preg_replace("/<.*>/", "", $a);

$c = preg_replace("/\s/", "", $b);

$d = preg_replace("/\r/", "", $c);

$e = preg_replace("/\n/", "", $d);

といった感じで分けてください。

id:yoski No.4

yoski回答回数13ベストアンサー獲得回数02006/11/29 20:43:02

ポイント20pt

preg_replace('/<[^>]*>|\s/', '', $str);

\s が改行にマッチするか不安なら

echo preg_replace('/<[^>]*>|[\s\r\n\f]/', '', $str);

ですかね。ってもうたくさん回答きてるし・・・

id:kanshizm

皆さん、ありがとうございます。

2バイト系文字が入っているからですかね?

うまくいきません。

正確にサンプルを書くと


あ ああ<xxxx>いいい

うう う<yyy>え え

あああいいいうううええ

でしょうか。よろしくお願いします。

2006/11/29 22:00:39
id:yoski No.5

yoski回答回数13ベストアンサー獲得回数02006/11/29 22:13:21

ポイント20pt

文字コードが UTF-8 なら preg_replace でうまく動くと思うんですが…

EUC なら mb_ereg を使うのがいいと思います。

※SJIS や JIS ってことはないですよね。。。

mb_eregi_replace('<[^>]*>|\s', '', $str);

id:kanshizm

文字コードはSJIJです。。。。

(^_^.)

↓では何も変化しません。

$utf=mb_convert_encoding($str,"UTF-8","SJIS");

$str2 = preg_replace("/<.*>/", "", $utf);

$sjis=mb_convert_encoding($str2,"SJIS","UTF-8");

print $sjis;

2006/11/29 23:09:40
id:nakamuraaaaa No.6

nakamura回答回数7ベストアンサー獲得回数22006/11/29 23:05:33

ポイント20pt

うちのWindows環境・Linux(Fedora Core2)環境では以下のスクリプトでうまく「あああいいいうううええ」に変換できました。

<?php

$str = "あ ああ<xxxx>いいい

うう う<yyy>え え";


$str = preg_replace("/<.*>|\r\n|\s/", "", $str);

//以下のprint文はWindows環境なら不要

//うちのLinux環境(Fedora Core2ではこの1行を加えれば表示されることを確認しました。

print mb_convert_encoding($str,'UTF-8','SJIS');

?>

id:kanshizm

$str1 = readfile("http://xx.com/xx.txt");

$str2 = mb_convert_encoding($str1,"UTF-8","SJIS");

$str3 = preg_replace("/<.*>|\r\n|\s/", "", $str2);

$str4 = mb_convert_encoding($str3,"SJIS","UTF-8");

print $str4;

としましたがダメです。

xx.txtと出力するファイルがShift-JISです。(携帯HPです。)

サーバーはロリポップです。

/<.*>|\r\n|\s/の部分はいろいろ変えてますが、ピクリとも反応しません。

2006/11/29 23:21:29
id:nakamuraaaaa No.7

nakamura回答回数7ベストアンサー獲得回数22006/11/30 00:12:16ここでベストアンサー

ポイント40pt

readfile()は入力ファイルを標準出力してしまうので

$str1 = readfile("http://xx.com/xx.txt");

としても$str1には文字列が格納されません。

正確には関数内で標準出力に入力ファイルの内容を出力後、戻り値としてファイルから読み込んだバイト数を返します。

参考:http://www.php.net/manual/ja/function.readfile.php


もし読み込むファイルがスクリプトと同じサーバ内ならfopenで読み込めばよいです。

同一サーバでなくHTTPでアクセスしたい場合は以下のスクリプトで標準出力をバッファリングすることでPHPの変数に格納し、置換処理を実現できます。

※ob_start()からob_end_clean();までが重要。

<?php

ob_start();

readfile("http://xx.com/xx.txt");

$str = ob_get_contents();

ob_end_clean();

$str = preg_replace("/<.*>|\r\n|\s/", "", $str);

//必要であれば適切なエンコーディングを実行

//print mb_convert_encoding($str,'UTF-8','SJIS');

print $str;

?>

id:kanshizm

できました~~、ありがとうございました。

2006/11/30 01:30:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません