- ベストアンサー
=(半角イコール)を扱うには?
データとして=を扱いたいのですが、どのようにしたらいいのでしょうか? >や<と同じようにするのですか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
フォームから受け取ったデータは「=」で分解しているかと思いますが、 $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]
その他の回答 (5)
- estea
- ベストアンサー率44% (39/87)
先の投稿の >split 関数の第三引数って指定してます? は、 「 ( $a , $b ) = split(/=/ , $buf , 2); としてるか?」って意味です。 正規表現よりスマートかと
お礼
回答ありがとうございます。 最後の「2」はどういう意味ですか?
補足
すいません、「=」は無事できたんですが、今度は「&」が…。 &は=でいうところの「%3D」みたいなのはどのようにすればいいのでしょうか?
- estea
- ベストアンサー率44% (39/87)
ん~ よく分からんが、ご自分のスクリプトを該当部分だけでも書かれてはどうですか?少々抽象的な議論では無理がありそうです。 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; というような感じでやってます。
- tatsu99
- ベストアンサー率52% (391/751)
perlは日本語に対応していますか? 試しに、漢字を一切入力せず、半角のアルファベットと=だけの文字を入力してみてはいかがでしょうか。 AAA=BBB ようにです。
お礼
回答ありがとうございます。 明日から日曜まで休みですので、月曜に確認いたします。 そのあとまた質問するかもしれません。 そのときはよろしくお願いします。
補足
試してみました。 aaa=bbbとしてみてもやはりダメでした。 それと下記に「記述はOK」とかいたのですが、私が間違えて行っていました。 記述もできてません。
- arukamun
- ベストアンサー率35% (842/2394)
No.1のarukamunです。 やっぱりFORMで=をデータとして送ることに問題があるかもしれませんので、 <INPUT NAME="A" VALUE="B=C"> として送っていたら <INPUT NAME="A" VALUE="B%3DC"> としてあげて $a = $in{'A'} ; $a =~ s/%3D/=/g ; でいかがですか?
お礼
回答ありがとうございます。 1.cgi(フォーム入力画面)→2.cgi(データをログファイルへ入力) 3.cgi(ログファイルを検索して閲覧) となっています。 2.cgiで $NAKAMI =~ s/=/%3D/g; ($NAKAMIは$bufferを分解したもの) とし、 3.cgiで $NAKAMI =~ s/%3D/=/g; としてみましたが、 2.cgiでつっかかっています。 (=以降が入力されない) どこを直したらいいのでしょうか?
補足
すいません、記述は無事できました。 ログファイルの中身はこんな感じです。 …&NAKAMI=あ=あ%3Dあ&… これを3.cgiで開こうとして $buffer =~ s/%3D/=/g; としてみましたが、表示がされません。 (%3D以降) どこがいけないのでしょうか?
- arukamun
- ベストアンサー率35% (842/2394)
こんにちは 普通に $a = '=' ; とか代入できると思いますが・・・。 もしかして、HTMLからのFORMのデータでしょうか? > >や<と同じようにするのですか? とは>や<という事ですか? &xx;で記述するのであれば、 &eq;とか&equal;は見たこと無いので、 &#xx;で = ですね。 または、%xxという形で記述する方法の事を言っているのでしょうか? であれば、 %3d で良いと思います。 全然的はずれな回答であれば、無視してください。
お礼
回答ありがとうございます。 察しの通り、フォームから入力を行い、そのログファイルを閲覧というようにしたいと思ってます。 フォームからの入力は$bufferを直接書き込んでるので、正常に行われています。(ログファイルを開くときちんと=が入力されています。 そのログファイルを開く時に=で表示が終ってしまうんです。 (「あああ いいい=ううう」だったら「あああ いいい」で終ってしまう) $buffer =~ s/=/=/g; としてみましたが表示されませんでした。 扱いが違うのでしょうか? それとも書き込みの時に処理を行わないといけないのですか? よろしくお願いします。
お礼
回答ありがとうございます。 きちんと表示されました!! 普通にsplitで分解したんじゃダメなんですね。 確かに=の部分で切れてるのは気づいてたんですが、 どうしていいのかわかりませんでした。 無事できました。 ありがとうございました。