- ベストアンサー
HTMLの生成について
- PC画面のTEXTAREAに入力した内容で携帯用(3キャリア対応)の画面を作成するためのHTMLファイルを生成する方法について教えてください。
- HTMLファイルを生成する際に注意すべき点やファイルの保存場所、ファイル名の設定方法についても教えてください。
- また、フォームに入力された内容を正しくファイルに保存するためのコードも教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
■<textarea ・・・・><?=$_POST['detail']?></textarea> の部分を、 <textarea ・・・・><?=htmlspecialchars($_POST['detail'])?></textarea> とされたほうが良いです。 修正をかけない状態で、「</textarea><font color="green">hoge</font><textarea>」といった文字でも入力して、送信ボタンを押してみてください。表示がおかしくなります。 そもそも、textareaにHTMLタグの挿入を許可する仕様ですか? 許可しないのであれば、 $detail = nl2br(mb_convert_encoding($_POST["detail"], "SJIS", "UTF-8")); この部分を、 $detail = nl2br(htmlspecialchars(mb_convert_encoding($_POST['detail'], 'SJIS', 'UTF-8'))); というようにしないといけません。もしくは、htmlspecialcharsを、strip_tagsに変えて、HTMLタグなどをそのもの削除するか。 ■ファイルの名前 日付だけだと、同時に書き込みがあった場合、バグが起きると思いますので、 $name = date("YmdHis", time()).uniqid().'.html'; とでもして、ユニークIDを付加してやってはいかがでしょう。 ■ファイルのオープン処理部分 touch関数でファイルを作成しなくても、fopenでwオプションをご利用なら、open時にファイルが作成されます。 また、fopenの処理は、少なくとも、 <?php $fp = fopen($filename, 'w'); if(!$fp){ //何らかのエラー処理、 exit('ファイルが開けません、的な'); } flock($fp, LOCK_EX); //ファイルのロック処理 if(fwrite($fp, $html) === false){ //ファイルに書き込みが出来なかった場合のエラー処理 exit('ファイルに書き込めませんでした、的な'); } fclose($fp); ?> ■HTMLタグがおかしい <table>のなかに<form>があり、<tr>の中に、<td>や<th>がないですね。これは、とりあえず属性値を置いておいて、記述すると <form> <table> <tr> <th>携帯サイト内容</th> </tr> <tr> <td><textarea></textarea></td> </tr> <tr> <td><input></td> </tr> </table> </form> という順番の入れ子にしたほうがいいです。 ■重大な話ではないですが if($_POST)の部分は、もう少し、きちんと書くと、フォームでPOSTがされた場合に遷移させるという意味合いで、 if(strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') としたほうが良いですね。 また、form部分の<?=$_POST['detail']?>としてある部分、POSTがされていない場合、未定義の(宣言されていない)変数が突然挿入されることになるので、スクリプトの先頭あたりにでも、 $post_detail = ''; と記述して、空の変数を定義してやって、 if($_POST)の中で $post_detail = $_POST['detail']; と別の変数に代入して扱ってやってはいかがでしょう。 そして、<?=$_POST['detail']?>の部分を前述した部分も含めて、 <?=htmlspecialchars($post_detail)?> という風にするといいと思います。 そのほか、一度作成したら修正できないのかとか、フォーム送信した後、プレビュー画面とか無くても良いのかとか、色々ありますが、そこらへんは順次対応していくのでしょうね。 がんばってください。
お礼
hogehoge78さん、ありがとうございます。 大変、参考になりました。 ご指摘の通り、プレビュー画面の作成がこれからの課題です。 チャレンジしてみます。 どうしても分からない事がある場合には、また質問するかも しれませんが、そのときはよろしくお願いします。