プロが教える店舗&オフィスのセキュリティ対策術

複数ある 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 タグから全ての改行が取り除かれ、一行にまとまると
いうイメージがあるですが、ところどころ改行が残ります。何がいけないのでしょうか・・・

A 回答 (8件)

$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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/30 18:43

No.5のarukamunです。



$input = s/\r\n|\r|\n//g;

だとサーバのOSによって正常に動作出来ない可能性があります。(\nの解釈の仕方がOSによって違うからです。)

$input = s/\x0D\x0A|\x0D|\x0A//g;

を使えば直接コードを指定しているので、OSに依存しないで正常に動作します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/30 18:52

私も最初 No.5 さんや No.6 さんのように思ったのですが、



$input =~ s/\n//g;
$input =~ s/\r//g;

上記二行だけでも全ての改行は取り除かれるハズです。
ところで、

> get 関数などでページを丸々取得して、

というのはどういう事でしょう?
何かのプログラムで HTML を取得してきているという事ですよね?
後、OS は何ですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/30 18:48

NO.5の方


>一行目の\n\rが逆で\r\nだと思うのですが

に同意します。

私が作って実際に稼動している掲示板の
スクリプトを見ると
\r\n
としています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/30 18:44

最近。

プログラムなんて触ってないんで、参考になるかどうかわかりませんけど。

$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;

とか、改行コードをチェック付き改行コードにしといて、
これ以外に改行している部分を探してみては?
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/28 19:10

こういう場合は一つずつ検証していきましょう。



まず、適当に改行が入ってるテキストなどを自分で作って、それで試してみてください。
問題なく改行は取り除けるでしょうか?

また、少々面倒ですが取り除けない改行(なのか?)のコードを調べてみてください。
秀丸ではなく、Perl で16進数に変換してみましょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/28 19:08

なんか違う気がする。



特殊なキャラクタが入ってる可能性はありませんか?
コントロールコードとか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/28 18:43

\n = LF


\r = CR

UNIX = LF
Mac = CR
Windows = CR+LF

$input =~ s/\n|\r//g;

LF+CR という改行コードはありませんよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/04/28 18:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!