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

データとして=を扱いたいのですが、どのようにしたらいいのでしょうか?
>や<と同じようにするのですか?

A 回答 (6件)

こんにちは



普通に

$a = '=' ;

とか代入できると思いますが・・・。
もしかして、HTMLからのFORMのデータでしょうか?

> >や<と同じようにするのですか?

とは&gt;や&lt;という事ですか?
&xx;で記述するのであれば、
&eq;とか&equal;は見たこと無いので、
&#xx;で

=

ですね。
または、%xxという形で記述する方法の事を言っているのでしょうか?
であれば、

%3d

で良いと思います。
全然的はずれな回答であれば、無視してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

察しの通り、フォームから入力を行い、そのログファイルを閲覧というようにしたいと思ってます。

フォームからの入力は$bufferを直接書き込んでるので、正常に行われています。(ログファイルを開くときちんと=が入力されています。

そのログファイルを開く時に=で表示が終ってしまうんです。
(「あああ いいい=ううう」だったら「あああ いいい」で終ってしまう)

$buffer =~ s/=/=/g;
としてみましたが表示されませんでした。
扱いが違うのでしょうか?

それとも書き込みの時に処理を行わないといけないのですか?

よろしくお願いします。

お礼日時:2003/08/28 17:49

No.1のarukamunです。



やっぱりFORMで=をデータとして送ることに問題があるかもしれませんので、

<INPUT NAME="A" VALUE="B=C">

として送っていたら

<INPUT NAME="A" VALUE="B%3DC">

としてあげて

$a = $in{'A'} ;
$a =~ s/%3D/=/g ;

でいかがですか?

この回答への補足

すいません、記述は無事できました。
ログファイルの中身はこんな感じです。

…&NAKAMI=あ=あ%3Dあ&…

これを3.cgiで開こうとして
$buffer =~ s/%3D/=/g;

としてみましたが、表示がされません。
(%3D以降)

どこがいけないのでしょうか?

補足日時:2003/08/28 18:57
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

1.cgi(フォーム入力画面)→2.cgi(データをログファイルへ入力)
3.cgi(ログファイルを検索して閲覧)
となっています。

2.cgiで
$NAKAMI =~ s/=/%3D/g;
($NAKAMIは$bufferを分解したもの)

とし、
3.cgiで
$NAKAMI =~ s/%3D/=/g;
としてみましたが、
2.cgiでつっかかっています。
(=以降が入力されない)

どこを直したらいいのでしょうか?

お礼日時:2003/08/28 18:28

perlは日本語に対応していますか?


試しに、漢字を一切入力せず、半角のアルファベットと=だけの文字を入力してみてはいかがでしょうか。
AAA=BBB ようにです。

この回答への補足

試してみました。

aaa=bbbとしてみてもやはりダメでした。

それと下記に「記述はOK」とかいたのですが、私が間違えて行っていました。
記述もできてません。

補足日時:2003/09/01 09:36
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
明日から日曜まで休みですので、月曜に確認いたします。
そのあとまた質問するかもしれません。
そのときはよろしくお願いします。

お礼日時:2003/08/28 23:50

ん~


よく分からんが、ご自分のスクリプトを該当部分だけでも書かれてはどうですか?少々抽象的な議論では無理がありそうです。

cgi-lib か CGI.pm を使っておられるのであれば、私は分かりませんが( 使わないんで ).

>…&NAKAMI=あ=あ%3Dあ&…
>これを3.cgiで開こうとして
>$buffer =~ s/%3D/=/g;

$buffer =~ s/%3D/=/g;
っていつやってます? ファイルから読み出した直後?
/&/ でぶちきった後? さらにそれを /=/ で切った後?

/=/ で切る前にやってる場合、/=/ で切るときに
split 関数の第三引数って指定してます?

この回答への補足

>$buffer =~ s/%3D/=/g;
>っていつやってます?

3.cgiの
送信されたフォームのデータを受け取って、$bufferを
($A,$B,$C,$D,$E,$F)=split(/&/,$buffer);
とわけたあと、
さらに
($ATITLE,$A)=split(/=/,$A);
というような感じで分けた後に、

$C =~ s/=/%3D/g;

というような感じでやってます。

補足日時:2003/09/01 09:37
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
明日から日曜まで休みですので、月曜に確認いたします。
そのあとまた質問するかもしれません。
そのときはよろしくお願いします。

お礼日時:2003/08/28 23:51

フォームから受け取ったデータは「=」で分解しているかと思いますが、



$content = 'name=aaa=bbb';
($para,$data) = (split(/=/,$content));
print "[$para][$data]";

↑を実行すると↓となり「=」以降が消えます。
[name][aaa]

$content = 'name=aaa=bbb';
$content =~ /^(.*?)=(.*)$/;$para = $1;$data = $2;
print "[$para][$data]";

↑を実行すると↓となります。
[name][aaa=bbb]
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
きちんと表示されました!!
普通にsplitで分解したんじゃダメなんですね。
確かに=の部分で切れてるのは気づいてたんですが、
どうしていいのかわかりませんでした。

無事できました。
ありがとうございました。

お礼日時:2003/09/01 09:51

先の投稿の


>split 関数の第三引数って指定してます?
は、
「 ( $a , $b ) = split(/=/ , $buf , 2);
としてるか?」って意味です。

正規表現よりスマートかと

この回答への補足

すいません、「=」は無事できたんですが、今度は「&」が…。
&は=でいうところの「%3D」みたいなのはどのようにすればいいのでしょうか?

補足日時:2003/09/01 10:46
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

最後の「2」はどういう意味ですか?

お礼日時:2003/09/01 10:05

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