xxxx<yyyyyyy yyyyy>z
zz zz
↓
xxxxzzzzz
に変換するやり方です。
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;
?>
preg_replaceを使ってみてはどうでしょう。
<?php $data = "xxxx<yyyyyyy yyyyy>z\nzz zz"; echo preg_replace("/(<.+>)|\n|\s/", NULL, $data); ?>
タグで囲まれた文字列に何かもっと制限がある場合は.+の部分を変える必要があります。
こんな感じでどうでしょうか?
$str = 'xxxx<yyyyyyy yyyyy>z zz zz'; $replaced = preg_replace('/(<([^<>]+)>|[\s])/', '', $str);
$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);
といった感じで分けてください。
preg_replace('/<[^>]*>|\s/', '', $str);
\s が改行にマッチするか不安なら
echo preg_replace('/<[^>]*>|[\s\r\n\f]/', '', $str);
ですかね。ってもうたくさん回答きてるし・・・
皆さん、ありがとうございます。
2バイト系文字が入っているからですかね?
うまくいきません。
正確にサンプルを書くと
あ ああ<xxxx>いいい
うう う<yyy>え え
↓
あああいいいうううええ
でしょうか。よろしくお願いします。
文字コードが UTF-8 なら preg_replace でうまく動くと思うんですが…
EUC なら mb_ereg を使うのがいいと思います。
※SJIS や JIS ってことはないですよね。。。
mb_eregi_replace('<[^>]*>|\s', '', $str);
文字コードはSJIJです。。。。
(^_^.)
↓では何も変化しません。
$utf=mb_convert_encoding($str,"UTF-8","SJIS");
$str2 = preg_replace("/<.*>/", "", $utf);
$sjis=mb_convert_encoding($str2,"SJIS","UTF-8");
print $sjis;
うちの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');
?>
$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/の部分はいろいろ変えてますが、ピクリとも反応しません。
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;
?>
できました~~、ありがとうございました。
できました~~、ありがとうございました。