• ベストアンサー

=(半角イコール)を扱うには?

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

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

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.5

フォームから受け取ったデータは「=」で分解しているかと思いますが、 $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]

KODAMAR
質問者

お礼

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

その他の回答 (5)

  • estea
  • ベストアンサー率44% (39/87)
回答No.6

先の投稿の >split 関数の第三引数って指定してます? は、 「 ( $a , $b ) = split(/=/ , $buf , 2); としてるか?」って意味です。 正規表現よりスマートかと

KODAMAR
質問者

お礼

回答ありがとうございます。 最後の「2」はどういう意味ですか?

KODAMAR
質問者

補足

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

  • estea
  • ベストアンサー率44% (39/87)
回答No.4

ん~ よく分からんが、ご自分のスクリプトを該当部分だけでも書かれてはどうですか?少々抽象的な議論では無理がありそうです。 cgi-lib か CGI.pm を使っておられるのであれば、私は分かりませんが( 使わないんで ). >…&NAKAMI=あ=あ%3Dあ&… >これを3.cgiで開こうとして >$buffer =~ s/%3D/=/g; $buffer =~ s/%3D/=/g; っていつやってます? ファイルから読み出した直後? /&/ でぶちきった後? さらにそれを /=/ で切った後? /=/ で切る前にやってる場合、/=/ で切るときに split 関数の第三引数って指定してます?

KODAMAR
質問者

お礼

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

KODAMAR
質問者

補足

>$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)
回答No.3

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

KODAMAR
質問者

お礼

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

KODAMAR
質問者

補足

試してみました。 aaa=bbbとしてみてもやはりダメでした。 それと下記に「記述はOK」とかいたのですが、私が間違えて行っていました。 記述もできてません。

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

No.1のarukamunです。 やっぱりFORMで=をデータとして送ることに問題があるかもしれませんので、 <INPUT NAME="A" VALUE="B=C"> として送っていたら <INPUT NAME="A" VALUE="B%3DC"> としてあげて $a = $in{'A'} ; $a =~ s/%3D/=/g ; でいかがですか?

KODAMAR
質問者

お礼

回答ありがとうございます。 1.cgi(フォーム入力画面)→2.cgi(データをログファイルへ入力) 3.cgi(ログファイルを検索して閲覧) となっています。 2.cgiで $NAKAMI =~ s/=/%3D/g; ($NAKAMIは$bufferを分解したもの) とし、 3.cgiで $NAKAMI =~ s/%3D/=/g; としてみましたが、 2.cgiでつっかかっています。 (=以降が入力されない) どこを直したらいいのでしょうか?

KODAMAR
質問者

補足

すいません、記述は無事できました。 ログファイルの中身はこんな感じです。 …&NAKAMI=あ=あ%3Dあ&… これを3.cgiで開こうとして $buffer =~ s/%3D/=/g; としてみましたが、表示がされません。 (%3D以降) どこがいけないのでしょうか?

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

こんにちは 普通に $a = '=' ; とか代入できると思いますが・・・。 もしかして、HTMLからのFORMのデータでしょうか? > >や<と同じようにするのですか? とは&gt;や&lt;という事ですか? &xx;で記述するのであれば、 &eq;とか&equal;は見たこと無いので、 &#xx;で = ですね。 または、%xxという形で記述する方法の事を言っているのでしょうか? であれば、 %3d で良いと思います。 全然的はずれな回答であれば、無視してください。

KODAMAR
質問者

お礼

回答ありがとうございます。 察しの通り、フォームから入力を行い、そのログファイルを閲覧というようにしたいと思ってます。 フォームからの入力は$bufferを直接書き込んでるので、正常に行われています。(ログファイルを開くときちんと=が入力されています。 そのログファイルを開く時に=で表示が終ってしまうんです。 (「あああ いいい=ううう」だったら「あああ いいい」で終ってしまう) $buffer =~ s/=/=/g; としてみましたが表示されませんでした。 扱いが違うのでしょうか? それとも書き込みの時に処理を行わないといけないのですか? よろしくお願いします。