• ベストアンサー

HTMLソース上での「改行」を除去したい。

いつもお世話になっております。 ver.PHP5 HTMLソースを見ると、 例えば、 ----------- あいうえお かきくけこ さしすせそ たちつてと ----------- のようになっているHTMLソースを、 ----------- あいうえお かきくけこ さしすせそ たちつてと ----------- とするには、どうしたら良いでしょうか。 (----------- は説明上、書いたもので、ソースには含まれません。) どなたか、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>mb_ereg_replace()を使うべきなのかな preg_系はバイナリセーフなのである程度までは問題ないです。 文字コードによっては誤ヒットもあるのでUTFで保存して、 u修飾子を付けてやる方が精度は高いです。 >それと、「$1」はなんでしょう? この場合、カッコで囲んだヒットする文字が$1になります。 したがって1つ以上の改行マークを1つの改行マークに変更しています

march4
質問者

お礼

いろいろ検証していますが、 yambejpさんの教えて下さった方法は全て、通常であれば問題なく機能するコードですね。 それが、ひとまず分かりました。 問題は依然として解決していないのですが、 また別の視点で考えて頂きたいので、ちょっと補足をします。 私が今していることは、 外部のサイトからfile_get_contents()で得たHTMLソースの中から、 一部を抜粋し、その中にある空白行(改行連発)を除去する ということです。 しかし、それがどのようにやっても、うまくいかないので、 次に、そのHTMLソースの一部を手動でコピーし、 それを自作のファイルにペーストし、 それに対して、file_get_contents()し、同様の操作をした所、 なぜかうまくいきました。 つまり、 外部サイトのソースをそのまま使うとダメで、 一度、自分のファイルとして作り直し、そこから引っ張ってくる という方法だと、うまくいくのです。 これはなぜなんでしょう? 同じ改行ではないのでしょうか? 私はDream Weaverを使っていますが、 ここにペーストすると、それまでの改行コードが、 こちらにとって都合のいい、\nや\r\nに変更されるのでしょうか。 だとすると、オリジナルの改行コードって一体、何者なのでしょう…。 どーしても、消したいのに…。 と、多少、検証はできましたが、今後の指針が見えてきません…。 もし、なにかわかることがありましたら、教えて下さい。 宜しくお願いします。

march4
質問者

補足

なんだか色々検証していたら、問題が解決してしまいました。 理由は謎です。 サーバのキャッシュか、何かは分かりませんが、 その「時間的な問題」から、解き放たれたのかもしれません。 よって、 特に変更はしていないはずですが、問題は解決されました。 つまり、 preg_replace("/(\r\n|\n)+/","$1",$html); これでうまくいっております。 おかげさまで助かりました。 また分からないことがありましたら、宜しくお願いします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

あ、そうですね。\r\nを改行としているかもしれません。 ちょっと修正してこんな感じで? <? $html=<<<eof <hr> <pre> あいうえお かきくけこ さしすせそ たちつてと </pre> eof; print $html; $html=preg_replace("/(\r\n|\n)+/","$1",$html); print $html; ?>

march4
質問者

お礼

早速ありがとうございます。 1つお聞きしたいのですが、 あいうおえ~というように、マルチバイト文字列に対しての パターンマッチを考えているので、 preg_replace()ではなく、 mb_ereg_replace()を使うべきなのかなと思いましたが、 どうなんでしょう? 半角英数文字列に対してなら、高速処理と言われているpreg系を使いたい所なのですが…。 それと、「$1」はなんでしょう? タイプミスでしょうか…。 すみません、いろいろと。 これから、試してみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

簡単にやるには正規表現 <? $html=<<<eof <hr> <pre> あいうえお かきくけこ さしすせそ たちつてと </pre> eof; print $html; $html=preg_replace("/\n+/","\n",$html); print $html; ?>

march4
質問者

お礼

早速ありがとうございます。 教わった通りにやりましたが、ダメでした。 この質問をする前に、予め様々な方法でトライしたのですが、ダメだったため質問させて頂きましたが、なぜかできずに苦戦しております。 そもそも、HTMLソース上で改行がされているというのは、 「\n」が見えない所で(裏の処理で)入っているから、なのだと思いますが、 ソース上はもちろんのこと、出力した文字列($html)にも「\n」は表示されていないわけで、 この「\n」を除去するというのは、どういうことなんだろうかと、 なんだか訳が分からなくなってしまいました。 ちなみに、除去処理する前の、 print $html; の結果は、 あいうえおかきくけこさしすせとたちつてと となります。 これは、私の前述の2例、どちらも同じです。 前述の2例で違う点は、「HTMLソース上での改行の入り方」だけです。 繰り返しになりますが、 $html=preg_replace("/\n+/","\n",$html); でもダメでした。 ダメというのはつまり、変化なし、ということです。 相変わらず、空白行 があります。 どういうことなんでしょうか、これは。。。 yambejpさんには今回もお世話になります。

march4
質問者

補足

すみません、補足です。 yambejpさんの例をそっくりそのまま使うと、 見事、その例においては、空白行が消えますね…。 では、私の文字列でそれができないのは、なぜなんだろうか…。 ブラウザのキャッシュもクリアしていますし…。 ん~。 わからないっ。 「\n」ではない種類の「改行」というものがあるのでしょうか。 何か他に考えられる除去方法はありますでしょうか。

関連するQ&A