• ベストアンサー

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

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

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • PHPで出力したHTMLのソースが汚い

    ただいまPHPを勉強中の者です。 PHPでHTMLを書き出してみたのですが、ソースが改行もインデントもされておらず非常に見にくくてなってしまいました。 改行は\n、インデントは\tを入れればよいというところまでは調べたのですが、それではphpのソースが\tだらけになってしまうのでは、、、と思っています。 みなさんがPHPでHTMLを書き出すときに効率良くきれいなHTMLソースにするために行っている方法を教えて頂きたく思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • エクセル&メモ帳での改行の空白部分のみの削除方法

    エクセルで状態( 1 )を状態( 2 )のように瞬時にしたいのですが、どのようにしたらよろしいのでしょうか? また、状態( 3 )のように空白が不規則な場合もお願いします。 ------------------------------------------ 状態( 1 ) あいうえお かきくけこ さしすせそ たちつてと なにぬねの 状態( 2 ) あいうえお かきくけこ さしすせそ たちつてと なにぬねの 状態( 3 ) あいうえお かきくけこ さしすせそ たちつてと なにぬねの ------------------------------------------ もし、エクセルでできないようでしたら、メモ帳、またはTeraPadでの方法でもいいです。

  • 改行を読み飛ばす

    以下のようなファイルを読み込みたいのですが…. -------------------------------------------------- あいうえを かきくけこ さしすせそ たちつてと -------------------------------------------------- のように1行文字列があって,1行空白行(改行のみ)があって…のような繰り返しのファイルなんですが,空白行を読み飛ばして続けて -------------------------------------------------- あいうえお かきくけこ さしすせそ たちつてと -------------------------------------------------- のように表示させる場合はどのように書いたらよいですか? -------------------------------------------------- while(fgets(str,256,fpin)){   if(strcmp(str,"\n")!=0){    printf("%s\n",str);   } } -------------------------------------------------- と書いたのですが,空白行も表示されてしまいます. 何か間違えているでしょうか? それとも実はファイルの空白行は改行じゃないとかでしょうか?

  • HTMLのMETA タグ、charset の扱いについて

    こんにちは。 HTMLのMETAタグの扱いについて教えてください。 下記HTMLソースの(1)~(3)までは正常に表示されます。 (4)に限って異常表示されるのは何故でしょうか? 異常の場合、途中からの表示になるのはタグ区切り文字の <>が不一致になるからでしょうか? また改行されなくなったのは何故でしょうか。 -----正常表示----- あいうえお メールアドレスaddress@domain.com かきくけこ さしすせそ たちつてと ------------------ -----異常表示----- address@domain.com かきくけこさしすせそたちつてと ------------------ (1)正常ケース1 一番シンプルなソースです。改行に<BR>を使っていません。 -----以下htmlソース内----- <HTML><META CONTENT="text/plain; charset=iso-2022-jp"> <PRE> あいうえお メールアドレス<A href="mailto:address@domain.com">address@domain.com</A> かきくけこ さしすせそ たちつてと </PRE></HTML> ----------------------- (2)正常ケース2 CONTENTの"の囲み内に更に"があります。 -----以下htmlソース内----- <HTML><META CONTENT="text/plain; charset="iso-2022-jp"> ※以降、正常ケース1と同じです。 ----------------------- (3)正常ケース3 charset="iso-2022-jp"と次の"までの間は、全角空白です。 -----以下htmlソース内----- <HTML><META CONTENT="text/plain; charset="iso-2022-jp" "> ※以降、正常ケース1と同じです。 ----------------------- (4)異常ケース charset="iso-2022-jp"と次の"までの間は、半角空白です。 -----以下htmlソース内----- <HTML><META CONTENT="text/plain; charset="iso-2022-jp" "> ※以降、正常ケース1と同じです。 -----------------------

    • ベストアンサー
    • HTML
  • PHPのソースって見ることはできないのですか?

    ソースを見ようとするといつもHTMLになってしまいます。 PHPのソースは見ることのできないようになっているのでしょうか? わかるかた教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • HTML ソースの美しさってそんなに重要?

    今派遣で入って、IT系企業のWEB制作の手伝いをしているんですが、一緒に入って一緒にHTMLをいじっている人がやたらソースが奇麗な事にこだわっているんです。 プログラマの中で働いていたから、ソースの奇麗さには拘ると…。 でもその人の言うソースの奇麗さは、私のいじったHTMLが一行でも余計な改行が入っていたり、 図の様なdivの対応が判るHTMLになっていないと駄目で。    <div id="all">       <div id="medium">           <div id="small">           </div>       </div>    </div> 例えば全部左詰めの様なソースは美しくないし、そんなソースを書く人はウェブデザイナー失格だそうで、ヒステリックにこちらによく切れてくるんです。 大きなサイトを作る時は気をつけないといけないと思うのですが、数ページ程度、HTML4.01のサイトでも、改行が入っていればお客さんに恥ずかしいから!と怒ってくるんです。(お客さんはそんなにソースばっかり見てないと思うんですが…)でもそんなにソースの並びを気にするわりに、デザイナなのに肝心のデザインの方は法則が結構めちゃくちゃで、クオリティが高いとは言えません。 上記に書いた様な奇麗なソースに心がける事は気をつけてやっていますが、一箇所でもやっていないと機嫌が悪くなられるので、そんなに神経質にならないといけないのかと思います。 プログラマの方はそんなにそこまで神経質にソースの並びを気にされるものでしょうか。 私も今までプログラマばかりの会社で3社程働き、その内一つは上場企業で、数千万単位のデザインとコーディングもやってき、PHPもたまには一から書いてきたのですが、そんなに神経質の事を言われた事はありません。 こういう人にはどう言えばいいのでしょうか。 ちなみに正社員の人はそこまソースを美しく、ソースを美しくと言ってきません。

    • 締切済み
    • CSS
  • 私はPHPで携帯にHTMLメールを送るソースを書きたいんですか。

    私はPHPで携帯にHTMLメールを送るソースを書きたいんですか。 PC向けのHTMLメールができましたけど、携帯のはどうやって考えますか。 どこかサンプルがありますか?

    • 締切済み
    • PHP
  • WinXPとWin7のPタグの見え方について

    例えば、以下のようなHTMLソースがあります。 【html】 <p>あいうえお</p> <p> </p> <p>かきくけこ</p> <p> </p> <p>さしすせそ</p> <p> </p> <p>たちつてと</p> WinXPのブラウザ IE6~9 Mozilla Firefox Google Chromeでは あいうえお かきくけこ さしすせそ たちつてと と行間が空くのですが、 Win7のIE7-9では 行間が詰まって あいうえお かきくけこ さしすせそ たちつてと と表示されてしまいます。 WinXPとWin7で見え方が違うのは、pタグに何の文字を入れていない(空タグ)だからでしょうか? WinXPとWin7で見え方を同じにするには、やはり、pタグの空タグ部分をすべて削除して、 CSSでpタグにマージンを入れてあげればよいのでしょうか。 アホな質問でもうしわけないですが、 見え方が違うのに悩んでまして、どなた様かお分かりでしたら、 お教え下さい。よろしくお願いします。  

  • PHPでHTMLソースを取得する方法はありますか?

    PHPでHTMLソースを取得する方法はありますか? RSSで複数のHTMLソースを取得しました。 以下のことをやりたいのですが、こういったことは可能でしょうか? ・複数のHTMLソースを取得する(同じサイトからなのでタグの種類も大体同じものです) ・その中から<data>タグを取得する(dataの中にはそれぞれ適当な数字が入っています) ・それをソートして、ソート順にURLを表示する。 このようなことは可能でしょうか? $RSS=RSSのURL(XML) foreach($RSS as $value){ $URL[]=$value->URL; } for ($i = 0, $n = count($URL); $i < $n; $i++) { echo $URL[$i] . "<br />"; } これでそれぞれのURLが URL1 URL2 URL3 とそれぞれ表示されます。これらのURLからそれぞれの<data>タグを取得して上のようなことをやりたいです。 説明が下手で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう