• ベストアンサー

HPの小説で

HPで小説をのせているのですが、主人公の名前などを 読んでくださる人が自由に自分の名前に変えたりできる ようにしたいと思っています。 ですが、どんな仕組みでみなさんしておられるのかわか りません(汗 どうかご存知の方おられましたら教えてください

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

  • ベストアンサー
回答No.3

#1です。 とりあえず作ってみました。 もしCGIで実装する際にご使用ください。 "read.cgi"------------------------- #!/usr/local/bin/perl -T print "Content-type: text/html\n"; print "\n"; my %IN; my $filename; my $dat_folder = './files/';#.datファイルの格納場所 #read.cgi?file=filename&key=value #と読み出します、filenameに.datは必要ありません。置き換え文字はいくつでも設定可能です。 my $str = $ENV{'QUERY_STRING'}; #&で切る my @temp = split(/&/, $str); foreach my $temp (@temp) { #=で切る my($key,$value)=split(/=/,$temp); #デコードします $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $key =~ tr/+/ /; if ($key eq 'file'){$filename = $value;next;} $IN{'%'.$key.'%'} = $value; } #汚染CHECK $filename =~ /(\w+)/; $filename = $1; unless (-e $dat_folder.$filename.'.dat'){ #ファイルが存在しない場合 print <<"EOM"; <HTML> <HEAD> <TITLE>error</TITLE> </HEAD> <BODY> 無効なファイル名を設定しました。<br> $filename.dat<br> は存在しません<br> </BODY> </HTML> EOM exit 0; } open (FH,'<',$dat_folder.$filename.'.dat'); while(<FH>){ foreach $temp (keys %IN){ s/([^%])$temp|^$temp/$1$IN{$temp}/g; } s/%%/%/g; print;} close(FH); ----------------------------------- 使用する際は、read.cgiと同じフォルダにfilesというフォルダをつくり、html文書の拡張子を.datにして保存します。 read.cgi files |-file1.dat |-file2.dat 読み出す際はread.cgi?file=filename&key1=value1&key2=value2 のようにURLを入れます。 filenameは上記のfile1、file2に相当するファイル名 文章中に%key1%や%key2%を書き込むとvalue1、value2としてHTML文書が作成されます。 %%と書くと%として出力されます。 valueに日本語など2byte文字を設定するときは%nn(nは0-9a-f)にエンコードする必要がありますが、HTMLタグの<Form>を使い送信すれば自動的に%nnにエンコードしてくれます。日本語コード(Shift-Jis,Jis,EUCなど)を設定しないと文字化けの可能性もあります。

その他の回答 (4)

  • riari
  • ベストアンサー率27% (8/29)
回答No.5

あ、さっきのつけたしなんですが、 タグをコピーして、ちょっと変えたりしながら使ってくださいね。 環境によっては使えない人もいるかもしれませんが、 CGIを使えない人はjavascriptが便利です!

tunamayo
質問者

お礼

こんなタグまで打ってくださってありがとうございます!申し訳ないです!! お知らせするのが大変遅くなってしまいまして...わたしの利用させていただいているサーバはCGIが使えないのです(汗)javascriptをつかうことに致しました。わざわざ本当にありがとうございました! お心遣い感謝します!

tunamayo
質問者

補足

お2人へのお礼をまとめさせていただきました。

  • riari
  • ベストアンサー率27% (8/29)
回答No.4

タグだとこんな感じだと・・・ javascriptを使用かな? ------------------------------------------- 二つの名前の場合(苗字と名前とか) <head>~</head>に <script type="text/javascript"> <!-- chip = prompt("名前を教えて下さい。",""); if(chip == null || chip == ""){ chip = "名前未入力時に呼ぶ名前";} chip1 = prompt("名前2を教えて下さい。",""); if(chip1 == null || chip1 == ""){ chip1 = "名前2を未入力時に呼ぶ名前する";} --> </script> 名前1を表示させたい所に (<body>~</body>で) <script type="text/javascript"> <!-- document.write(chip); --> </script> 名前2を表示させたい所に (<body>~</body>で) <script type="text/javascript"> <!-- document.write(chip1); // --> </script> ------------------------------------------- 一つだけの名前を使用のとき (<head>~</head>で) <script type="text/javascript"> <!-- chip = prompt("お名前を記入してください",""); if(chip == null || chip == ""){ chip = "名前未入力時に呼ぶ名前"} --> </script> 名前を呼ばせたい場所に <script type="text/javascript"> <!-- document.write(chip); --> </script> こんな風にいれるだけでいいんじゃないでしょうか?

  • lc_akdk
  • ベストアンサー率13% (3/22)
回答No.2

所謂ドリーム小説でしょうか? でしたらDream Makerを使っている方が多いように思います。 http://www.babu.jp/~raika/Dream/ こちらでしたらレンタルですので、CGIが使えなくても使えると思います。

参考URL:
http://www.babu.jp/~raika/Dream/
tunamayo
質問者

お礼

ドリーム小説といったらなにか漫画のキャラでつくる小説のことでしょうか(今調べたのでよくわからなくて;)オリジナル小説なのですが、このサイト様のいいですね!とても勉強になりました。教えてくださってありがとうございました!!

回答No.1

動的に、HTMLを作成する何らかのプログラムを使用することになると思います。 たとえばCGIの一つであるPerlをつかうとしたら 文章本文が、text1.datだとして、この中で主人公の名前を%name%と書いておくとします。 あとは、Perlにファイルがtext1ということと名前を送って、書き換えてもらえばいいのです。 tunamayo様の環境でCGIが使えるようなら、私がCGIを作成することも可能ですが、それなりの手間が掛かりますゆえに、使えるようなら補足をください。