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回読み直してます)。
[上に]
[前に]
[次に]