C言語CGIのJavascript内の’%’を認識させるには?

[上に] [前に] [次に]
しん [E-Mail] 1999/07/07(水) 19:37:32
このラウンジ内で紹介されていたJavascriptをCGIに実装したのですが、
(TEXTAREAで入力文字数を制限するには?という質問)
ロジック内にある’%’が巧く認識されていないみたいで、
正常に動作してもらえません。
(ソースを表示させると'%'が消えている)
’%’をきちんと認識させるにはどうしたらよいのでしょうか?

下のリンク先が参照したロジックです。
../199808/98080062.htm

B-Cus 1999/07/07(水) 19:58:32
どういうふうに書いたのかわからんので何とも言えませんが
(ソースくらい公開しましょうや)、printf/sprintfの第一引数に
そのまま%を書いたとか?

printfでは、%dや%sなどでフォーマットの指定をするので、
そのまま「%」を置きたい場合は「%%」としなくてはいけません。

maeda [E-Mail] 1999/07/07(水) 20:05:46
あれ? 「\%」じゃありませんでしたっけ?f(?_?)

maeda [E-Mail] 1999/07/07(水) 20:10:36
↑失礼。
 同じ記号を続けて記述した場合、その記号そのものになるんでしたね(^_^;

とこやん 1999/07/07(水) 20:11:20
あれ?とこやんは「%%」でやってます。

B-Cus 1999/07/07(水) 20:12:59
Cでの文字列の仕様として、
 エスケープはするときは「\」を付けるべし
と決まっているわけです。C言語においては、%は特別な文字ではありません。

で、%% はprintfに渡す文字列の話。Cという言語自体の仕様ではなく、
printfというライブラリの仕様です。scanf/sscanfも同じ。

man 3 printf
  %  A `%' is written. No argument is converted. The complete conver-
     sion specification is `%%'.

% cat a.c
main(){
    printf("abc%\n");
    printf("abc\%\n");
    printf("abc%%\n");
}
% cc a.c ; ./a.out
abc
abc
abc%

maeda [E-Mail] 1999/07/07(水) 20:21:32
 確認完了。MS-Cでは、

「warning C4129: '%' : エスケープ シーケンスとして正しく認識されませんでした。」

という警告が出ました(^_^;

# ちなみに、実際には半角カナで出力されています。
# そーか、ずっと勘違いしてたです。

しん [E-Mail] 1999/07/08(木) 08:59:51
[[解決]]
みなさん回答有難うございました。m(__)mペコ
%%で%を文字として認識してくれるんですね。
Printfとかの仕様だとは全然気がつかなくって、
訳も分からずデコードの%として認識されてるのかなー?なーんて変な方向にも考えていました。

遅れ馳せながら自分の遭遇していた現象です。

printf("for(;(i=escval.indexOf('%', i))>-1; i++) {\n");

上の行の'%'が認識されずページを表示してソースを見ると、
for(;(i=escval.indexOf(', i))>-1; i++)
と表示されていました。

B-Cus 1999/07/09(金) 16:12:54
> C言語CGIのJavascript内の’%’を認識させるには?
> このラウンジ内で紹介されていたJavascriptをCGIに実装したのですが、
この文を読んで「何言ってるんだろう?」と思ってたんですが、
どうやら「Javascriptを含むHTMLを出力するCGIをC言語で作成した」
ってことのようですね。

症状は具体的に。文章はわかりやすく。投稿する前に3度読み直すこと
(僕は3回読み直してます)。

[上に] [前に] [次に]