• ベストアンサー

htmlファイルの改行について

複数ある html ページから、改行部分( <BR> ではなくて )、を自動的に削除して再び保存する、というプログラムを自作しているのですが、\r\n, \r, \n に当てはまらない改行コード? があるみたいで、完全に取りきれないのです。 $input =~ s/\n\r//g; $input =~ s/\n//g; $input =~ s/\r//g; もしくは、 $input =~ s/\x0D\x0A|\x0D|\x0A//g; という具合にしているのですが、予想では、数行にわたるhtml タグから全ての改行が取り除かれ、一行にまとまると いうイメージがあるですが、ところどころ改行が残ります。何がいけないのでしょうか・・・

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.5

$input =~ s/\n\r//g; $input =~ s/\n//g; $input =~ s/\r//g; ですが、一行目の\n\rが逆で\r\nだと思うのですが。 $input = s/\r\n|\r|\n//g; \rと\nだと勘違いしそうなので、 $input = s/\x0D\x0A|\x0D|\x0A//g; 参考URLをご参照ください。

参考URL:
http://www.bayashi.net/st/pdmemo/chara.html
soushi
質問者

お礼

あ、逆でしたか? すみません。ご指摘ありがとうございます。 一度は試しているんですが、s/\x0D\x0A|\x0D|\x0A//g; の方式に戻してみました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.8

No.5のarukamunです。 $input = s/\r\n|\r|\n//g; だとサーバのOSによって正常に動作出来ない可能性があります。(\nの解釈の仕方がOSによって違うからです。) $input = s/\x0D\x0A|\x0D|\x0A//g; を使えば直接コードを指定しているので、OSに依存しないで正常に動作します。

soushi
質問者

お礼

重ね重ねありがとうございます。 釈然としないままあれこれやってましたが、原因がわかりました! IEで名前を付けて保存、とやると、いくらご指摘のコードをかましても改行が削除されない状態でPCにダウンされるんですが、FTP経由だと上記の方法でちゃんと削除できているようです。 とりあえず、これで問題はありません。 皆様どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.7

私も最初 No.5 さんや No.6 さんのように思ったのですが、 $input =~ s/\n//g; $input =~ s/\r//g; 上記二行だけでも全ての改行は取り除かれるハズです。 ところで、 > get 関数などでページを丸々取得して、 というのはどういう事でしょう? 何かのプログラムで HTML を取得してきているという事ですよね? 後、OS は何ですか?

soushi
質問者

お礼

ありがとうございます。 get 関数 で、任意のURLのページを丸々取得できるようです。これも悪意があるといろいろと使えそうですが・・・OSはFreeBSD でした。

全文を見る
すると、全ての回答が全文表示されます。
  • shunet
  • ベストアンサー率28% (15/52)
回答No.6

NO.5の方 >一行目の\n\rが逆で\r\nだと思うのですが に同意します。 私が作って実際に稼動している掲示板の スクリプトを見ると \r\n としています。

soushi
質問者

お礼

どうもありがとうございます。 逆だと意味がちがってくるのでしょうね。

全文を見る
すると、全ての回答が全文表示されます。
  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.4

最近。プログラムなんて触ってないんで、参考になるかどうかわかりませんけど。 $input =~ s/\n\r//g; $input =~ s/\n//g; $input =~ s/\r//g; で、やれば一通り、改行コード外すと思うんですけどね。 っで、改行コードは全部外れてるけど、その結果の1行があまりにも長すぎて、 使用しているエディタが、なんかの弾みで改行しているように表示してるだけ。 とかないですよね? 昔、そーいう事があったような。なかったような。 すいません。 回答しといてなんですけど、これっぽっちも自信がないです。 $input =~ s/\n\r/a\n/g; $input =~ s/\n/b\n/g; $input =~ s/\r/c\n/g; とか、改行コードをチェック付き改行コードにしといて、 これ以外に改行している部分を探してみては?

soushi
質問者

お礼

ありがとうございます。 そうですよね・・・経験者の方はそう考えると思うんです。私もまずその方法で確かめてみました。 エディタが勝手に改行しているケースは考えられないようです。 うー・・・もうちょっと四苦八苦してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.3

こういう場合は一つずつ検証していきましょう。 まず、適当に改行が入ってるテキストなどを自分で作って、それで試してみてください。 問題なく改行は取り除けるでしょうか? また、少々面倒ですが取り除けない改行(なのか?)のコードを調べてみてください。 秀丸ではなく、Perl で16進数に変換してみましょう。

soushi
質問者

お礼

度々お答えいただいて恐れ入ります。 例えばビルダーとかで作った自作ページは問題なく取れます。 get 関数などでページを丸々取得して、それから改行 コードを取り去ることができないんですね・・・どうも。 アドバイスありがとうございます。 手探りながらご指摘どおりやってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.2

なんか違う気がする。 特殊なキャラクタが入ってる可能性はありませんか? コントロールコードとか。

soushi
質問者

お礼

そう思って、皆さんにお聞きしたんです。 秀丸で空けてテキストファイルとしてながめている 限りは、特殊なコードが埋め込まれていそうにないん ですね・・・うーん、なんでだろう。 どうやら思いのほか同様の経験者がいないようで残念。

全文を見る
すると、全ての回答が全文表示されます。
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.1

\n = LF \r = CR UNIX = LF Mac = CR Windows = CR+LF $input =~ s/\n|\r//g; LF+CR という改行コードはありませんよ。

soushi
質問者

お礼

しかし、サンプルソースなんかにそう書いてあるので、 そのまま流用してるんです。 私が勝手にあみ出したワケではありません・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CGIで改行タグを改行コードに変換ってできますか?

    CGIで改行タグを改行コードに変換ってできますか? $text =~ s/\r\n/<br>/g; $text =~ s/\r/<br>/g; $text =~ s/\n/<br>/g; で確認画面上で表示されるtextareaの文章は改行されるのですが、 届いたメールには<br>と表示されてしまって困ってます。 PHPでは変換できるみたいなのですが、perlでも出来るのでしょうか?

    • ベストアンサー
    • CGI
  • 改行の変換がうまく出来ていない?

    perlの更新記録CGIを改造中です。 テキストエリアを数個設置しているのですが、うまく保存が出来ません。 新規情報を入力するときはちゃんと改行したいデータも保存されます。しかし、修正画面で、何もしないでそのまま保存し直したところ、変に改行が入ってしまいます。(情報の途中で改行が入るので、ゴミレコードが増えてしまう。) 修正画面からログに書き込む手前で<BR>の変換をしていますが、何が間違っているのでしょうか? $in{'kouc1'} =~ s/\r\n/<br>/g; $in{'kouc1'} =~ s/\r/<br>/g; $in{'kouc1'} =~ s/\n/<br>/g; $in{'kouc2'} =~ s/\r\n/<br>/g; $in{'kouc2'} =~ s/\r/<br>/g; $in{'kouc2'} =~ s/\n/<br>/g; $in{'kouc3'} =~ s/\r\n/<br>/g; $in{'kouc3'} =~ s/\r/<br>/g; $in{'kouc3'} =~ s/\n/<br>/g; 新規入力のほうもまったく同じ状態ですが、こちらは正常に保存されます。 足りない情報があればすぐに指摘をお願いします。

    • 締切済み
    • CGI
  • 変数のデータに改行コードのみを削除したい

    変数のデータに改行コードのみを削除したい 変数のデータに改行コードのみを削除したいと思っておりますがうまくできません。 $samのデータに以下の内容でデータがはいってます。 (ここから) これはテストです。<br>\n <br>\n これはテストです。<br>\n <br>\n <br>\n これはテストです。<br>\n これはテストです。<br>\n (ここまで) $sam=~ s/<br>\n//g; だと本来改行コードがほしい内容まで削除してしまいます。 以下の内容もおかしいと思いますが、うまく出来ませんでした。 $sam=~ s/.*?<br>\n//g; この内容の場合改行コードが欲しい。それ以外は削除したい。 タグの除去は以下のサイトを検索で見つけたのですが、ちょっと違うかなと思い質問させていただきました。 HTMLタグを取り除く http://www.nishishi.com/perltips/string4.html 以上、よろしくご指導賜りたく思います。

    • ベストアンサー
    • Perl
  • TEXTAREAの改行がうまくいきません。

    自作で掲示版を作成している、初心者です。現在作成中の掲示版にTEXTAREAに入力し、LOG上では1行目<BR>2行目といった形で改行をBRに置き換えて保存していますが、その修正としてLOGからデータをとり改行状態で表示させたいのですが、 うまく改行されない状態です。下記にLOGより読み込み。タグを\rに置き換えて いますが、TEXTAREAに表示されなく、改行表示どころではありません。 いったいどうすればよいのでしょうか?ご教示をお願いします。 <CGI文> $wkaaa1 = $IXUSERINF{Enaiyo}; データを取得 $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) $mesbuff .= "<TR><TD nowrap ><TEXTAREA ROW=\"10\" COLS=\"48\" NAME=\"Enaiyo\" WRAP=\"soft\">$wkaaa </TEXTAREA></TD></TR>"; <sub> sub notag1 { local($_) = @_; s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi (これで <BR>を\n(改行)にしてるつもり return $_; }

    • ベストアンサー
    • CGI
  • perlでの改行コードの置換

    perlで改行コードを置換したいのですが・・・ もとのファイルはS-JISコードでその中身をEUC(UNIXで使用するために)に変換します。ここまではOKなのですが、改行コードがうまく行きません。 改行コードをUNIXで使うためにLFだけにしようと思い、 $line =~ s/\r\n/\n/g; (これは\r\nで引っかからない) とか $line =~ s/\n/\x0A/g; とかにしてみたのですがうまく行きません。 どのようにすればよろしいでしょうか?

    • ベストアンサー
    • Perl
  • 表(<table>)の直前が、改行されてしまう。

    表(<table>)の直前が、改行されてしまう。 perlでコーディングしています。データベースはmdbファイルです。 <textarea>内を簡単なWebエディタに見立てて、 <textarea>内へhtmlタグなどで書き込んだデータを、 mdbのメモ型フィールに更新し、これをブラウザで表示させています。 このとき、表(<table>)を表示させるために、<textarea>内に<table><tr><td>タグを入力するのですが、mdbファイルに更新する際に、 <table> <tr> <td>   : のように、改行した状態で更新すると、書き込んだ改行分だけ、ブラウザに表示された表の直前が改行されてしまいます。 (mdbファイルに直接書き込んでも同現象となりました。) <table<tr><td>・・・ と改行せずに書き込むと、ブラウザに表示された表の直前は改行されませんでした。 なお、ブラウザに表示させる側のcgiファイルには、改行キー(¥nなど)を改行タグ(<br>)に変換させるために、   $textarea1 =~ s/\r\r/<br>/g;   $textarea1 =~ s/\r/<br>/g;   $textarea1 =~ s/\n/<br>/g; としているため、これと関係していると思われるのですが、 わたくしとしては、  ●<textarea>内で手入力した改行は、ブラウザ表示に反映させるが、  ●<tabel>・・・・</tabel>の部分は、改行して入力されていても、この改行だけは無視する、 と言った、都合のよいことをしたいのですが・・・、行き詰っております。 perlやcgiの問題ではないかも知れませんが、 どなたか、よいアドバイス、ご提案などございませんでしょうか。 ご教授いただければ、大変助かります。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • textareaで改行すると、修正時、書き込んだデータがなくなります。

    CGIのカスタマイズに関する質問です。 ソードワールドRPGキャラクターシート管理CGIを使用しています。 初期の設定で<input type>と<textarea>の改行をする際は<br>を使うと言う形になっています。 その中で<textarea>の改行をエンターキーでしたいと思い、 sub htmlunquote{ my $text = shift; $$text =~ s/&lt;/</g; $$text =~ s/&gt;/>/g; の部分を sub htmlunquote{     my $text = shift; $$text1 =~ s/\r\n/<br>/g; $$text1 =~ s/\r/<br>/g; $$text1 =~ s/\n/<br>/g; と変換してみました。 すると、エンターキーで改行できるようになったのですが、修正や追記しようとすると、何故か前に書き込んだ文章が消えてしまっています。 なぜ、文章が消えてしまうのか、全く検討がつきません。FFFTPから、データを覗くと、書き込まれたデータはあるのですが……。 それとも改行をさせる方法が根本的に間違っているのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • CGI
  • テキストエリアが複数あるときの改行変換方法

    CGIを改造中です。 ログに保存するとき改行(<BR>)を変換する必要があると思うのですが、 複数のテキストエリアがある場合はどのようにしたら良いのでしょうか? 現状 $in{'$com1'} =~ s/\r\n/<br>/g; $in{'$com1'} =~ s/\r/<br>/g; $in{'$com1'} =~ s/\n/<br>/g; $in{'$com2'} =~ s/\r\n/<br>/g; $in{'$com2'} =~ s/\r/<br>/g; $in{'$com2'} =~ s/\n/<br>/g; ~~ と言う風に書いていますが、うまく変換されていないようで、ログが崩れてしまっています。 どのように記述するのが良いのでしょうか?

  • 改行をカンマ変換、複数ある場合を1個に

    テキストの改行部分をカンマに置き換えています。JavaScript初心者です。 if(getId("br_kanma").checked==true){ str = str.replace(/(\r\n\r\n)|(\n\n)|(\r\n)|(\n)/g, ","); } この場合で、連続改行が続く場合にカンマも増えてしまいます・・・ 改行スペースが多くてもカンマを1個だけにするにはどうしたらよいでしょうか?  

  • EXCELで指定した改行タグを入れていく

    A列に1セルごとに、改行のある文章があります。 ーーー 例:A1 さいたさいたチューリップの花が ならんだならんだ 赤白黄色 どの花みてもきれいだな ーーー この改行のある文章を、B1に『指定したタグ』を入れて記入させたいです。 ーーー 例:A1→B1 さいたさいたチューリップの花が\r\n\r\nならんだならんだ\r\n赤白黄色\r\n\r\nどの花みてもきれいだな ーーー ※なぜ、\r\nかというと、 botbirdというサイトで、TwitterのBOTを作るためです。 このように改行のあるA1の文章を、 B1で指定したタグを入れて記入させるには、どのような式でできますか? EXCEL2016です。 よろしくお願いいたします。

このQ&Aのポイント
  • ファックスの自動送信ができず、電話回線会社から「この電話番号には接続できません。」とアナウンスが流れます。
  • ファックスはオンフックでの送信はできるが、自動送信の際に電話回線会社から接続エラーが発生し、送信ができません。
  • ファックスの自動送信に際して接続エラーが発生し、送信ができない状況です。
回答を見る

専門家に質問してみよう