PHPからのファイル書き出しでHTMLタグがうまく書き出されない問題について

このQ&Aのポイント
  • phpを使って拡張子の異なるファイルを書き出すソフトを作成しました。
  • しかし、HTMLタグを含むスクリプトを書き出すとタグがエスケープされてしまいます。
  • 文字コードの問題かもしれませんが、解決法を教えてください。
回答を見る
  • ベストアンサー

PHP からのファイル書き出しで、 HTMLタグがうまく書き出されない問題について。

phpを使っていろんな拡張子のファイル(php html txt画代表的) を書き出すソフトを作ったのですが、 目的としては、携帯電話からアクセスしていつでも本を見ながらスクリプトを実験できるということです。 でも、なぜか「<a href="http://*****">クリック</a>」 というようなスクリプトで書き出すと「<a href=\"http://*****\">クリック</a>」 になってしまって困っています。 これは、文字コードが原因なのでしょうか。 どなたか教えてください。 <?php $data = $_POST["data"]; $extension = $_POST["extension"]; $name = "data"; if($data){ $fp = fopen($name. ".". $extension,"w+"); fwrite($fp,$data); fclose($fp); print "書き出し完了"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <style type="text/css"> <!-- textarea { width: 600px; height: 10em; } --> </style> </head> <form method="post" action="write.php"> 拡張子<br> <input type="text" name="extension" value="txt"><br/> 内容<br/> <textarea name="data"></textarea><br/><br/> <input type="submit" name="submit" value="送信"> </form>

noname#71550
noname#71550
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.1

確認してみないとわかりませんが、おそらくお使いの環境ではmagic_quotesが有効になっているのでは無いでしょうか? get_magic_quotes_gpc()関数で確認してみてください。 magic_quotesが有効になっている場合、$_POST[]の値は勝手に上記のような加工がされます。 stripslashes()関数を通すことで、元の状態に戻せます。 $dataの受取をこのように書くとよいでしょう。 if ( get_magic_quotes_gpc() ) { $data = stripslashes( $_POST["data"] ); } else { $data = $_POST["data"]; }

noname#71550
質問者

お礼

いやーーーーっ!!! 本当にありがとうございます。 おかげで携帯からもphpなどの勉強ができます!!! 本当に感謝しています。 ありがとうございました(^O^)

関連するQ&A

  • ファイルに記憶できない。

    こんにちわお聞きしたいのですが、以下のスクリプトで、送信で引渡されたデータを先に記録し、再度ファイルから取出し表示したいのですが data.txtに書き込まれないです。サーバーに上げている、data.txtの の属性は書き込みにしています。 <?php $submit = $_post["submit"]; if($submit == "送信"){ $name = $_POST["NAME"]; $mail = $_POST["MAIL"]; $body = $_POST["BODY"]; if($name== "" or $body == ""){ echo '<font color = "#FF000">必須項目入力エラー</font><br>'; echo 'お名前と本文は必ず入力してください<br>'; echo '<a href = "javascript:history.back()">戻る</a>'; exit; } $body = str_replace("\r\n", "<br>", $body); $fp = fopen("data.txt","w"); fwrite($fp,"$name\t$mail\t$body\n"); fclose($fp); } echo ' subject03-BBS <h1>subject-BBS</h1> <form method="post" action="subject03.php" > お名前 <input type="text" size="20" maxlength="40" name="NAME"> メール <input type="text" size="30" maxlength="60" name="MAIL"> <p>本文<br></p> <textarea rows="20" cols="80" wrap="soft" name="BODY"></textarea> <p><input type="submit" name="SUBMIT" value="送信"><p/> </form> '; $data = file("data.txt"); foreach($data as $value){ $view = explode("\t".$value); $name = $view[0]; $mail = $view[1]; $body = $view[2]; if($mail== ""){ echo "お名前:$name<br>"; } else{ echo "お名前:<a href=\"mailto:$mail\">$name</a><br>";} echo "本文:$body<br>"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのお問い合わせフォームが動かない

    「ぶっとびねっと」というレンタルサーバーに以下の2つのファイルをアップしました。 ・contacts.html ・contacts.php しかしフォームに入力後、送信を押してもメールが指定したアドレスに届きません。 なぜでしょうか。。。 ソースを下に貼りますので、ご教授願います。 -----  contacts.html  -------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>メールフォーム</title> </head> <body> <form method="post" action="contacts.php"> お名前:<input type="text" name="namae" /><br /> メールアドレス:<input type="text" name="meado" /><br /> 件名:<input type="text" name="subject" /><br /> お問い合わせ内容:<textarea name="content" cols="50" rows="5"></textarea><br /> <input type="submit" name="submit" value="メール送信" /> </form> </body> </html> ------------------------------------------------------ -----  contacts.php  -------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"    /> <title>メールフォーム</title> </head> <body> <?php if ($_POST["submit"] == "メール送信") { mb_language("Ja") ; mb_internal_encoding("UTF-8") ; $mailto="○○○○@hotmail.co.jp"; $subject = $_POST["subject"]; $content = $_POST["content"]; $namae = $_POST["namae"]; $meado = $_POST["meado"]; $mailfrom="From:" .mb_encode_mimeheader($namae) ."<".$meado.">"; mb_send_mail($mailto,$subject,$content,$mailfrom); } ?> <form method="post" action=""> お名前:<input type="text" name="namae" /><br /> メールアドレス:<input type="text" name="meado" /><br /> 件名:<input type="text" name="subject" /><br /> お問い合わせ内容:<textarea name="content" cols="50" rows="5"></textarea><br /> <input type="submit" name="submit" value="メール送信" /> </form> </body> </html> ------------------------------------------------------

    • ベストアンサー
    • PHP
  • 複数のプログラムを1ページで行えますか?

    PHP始めたばかりです。 下記の事で困っています。 単体ではうまく動くのに二つ並べると動作しません。 どうしたら複数のプログラムを1ページで行えますか? どこかに番号を付けて同じにならないようにするのかなとは思いますが分かりません。 ご教示お願い致します。 <?php $file = 'txt/a0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form> <p> <p> <?php $file = 'txt/b0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form>

    • ベストアンサー
    • PHP
  • <?php if( $mode=='input')

    いつもお世話になりありがとうございます。 標記の件。 6行目がエラーになります。 エラーメッセージは Parse error: Unclosed '{' on line 64 in C:\xampp\htdocs\form.html on line 85 です。 <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <h1>ブログフォーム</h1> <form action="/blog_create.php/" method=_POST>  ペンネーム<br> <input type="text" name="name"><br>   ブログタイトル<br>   <input type="text" name="title"><br>    カテゴリー<br> <input type="text" name="category"><br> ブログ本文<br> <textarea name="content" id="content" cols="50" rows="80"></textarea><br> <input type="submit" value="送信"> </form> <p><a href="/">戻る</a></p> </body> どう直せばいいでしょうか? 度々申し訳ございません。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpの掲示板で新しい順に表示したい

    php初心者です。 phpで掲示板を作っています。 新しい順に表示したいのですが、やり方がわかりません。 古い順に表示するやり方はわかるのですが、どうやったらよいでしょうか。 古い順のソースです <html> <head> <title>一行掲示板</title> </head> <body> <h2>一行掲示板</h2> 書き込む内容を入力してください。<hr color="black"> <form name="form" action="./sample01.php" method="POST"> タイトル      <input type=text name="title" action="./sample01.php" size="30" method="POST"><br><br> 名前          <input type=text name="namae" action="./sample01.php" size="30" method="POST"><br><br> メッセージ  <textarea name="body" rows="5" cols="50"></textarea> <input name="write" type="submit" value="書込"> <input name="write" type="reset" value="リセット"><hr> </form> <?php $data = file("../php/test1.txt"); for($i=0; $i<sizeof($data); $i++){ print "タイトル.${i}:<br>\n名前.${i}:<br>\n記事NO.${i}:${data[$i]}<br>\n<hr>"; } ?> <br> <a href="../phpcollect/index.html">トップページへ</a> </body> </html> どうかわかる方おりましたらご教授お願いします。

    • 締切済み
    • PHP
  • phpでテキストファイルへ書き込み

    HTMLでのテキストエリアに記述された内容をPHPを利用して、テキストファイル化したいと考えています。 具体的には、画像上をクリックし、座標値(xとy)をテキストエリアに表示させます。 その表示された座標値をテキストファイルに保存したいと考えています。 以下がソースコードです。 ----- sumple.php ------------------------------ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <SCRIPT type="text/javascript"> function xyget(e){ var box = document.getElementById("xy"); box.value += e.clientX + "\n" + e.clientY + "\n"; } </SCRIPT> </head> <body> <br>画像上をクリック<br> <form name="picture"> <div><img src="sumple.jpg" onclick="xyget(event)" id="pic"></div> <b>座標値</b> <form action="sumple.php" method="POST"> <textarea name="xy" rows="5" cols="5"></textarea> <input type="submit" value="完了"> </form> <?php $content = $_POST['xy']; if ($content) { $fp = fopen('sumple.txt', 'w'); fputs($fp, $content); fclose($fp); print "書き込み完了しました。"; } ?> <br> </body> </html> ---------------------------------------------- テキストファイルはあらかじめ作成してあり、テキストエリアに座標値もちゃんと表示できています。 ですが、完了ボタンを押してもテキストファイルに書き込みがされず、困っています。 お願いします。

    • ベストアンサー
    • PHP
  • php

    <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF8;" /> <table border="1"> <form action="for3.php" method="POST"> <tr><th>タイトル<td><input type="text" name="text" size="50"></td></tr> <tr><th>本文<td><textarea name="subject" cols="52" rows="8"></textarea> <tr><td><input type="submit" value="保存 する" /></td><tr> </table> </form> <?php $text = htmlspecialchars($_REQUEST['text']); var_dump($_REQUEST); ?> <?php $text = preg_replace("/\n/","<br />",$text); ?> <?php $file = fopen("sample.txt","r"); fwrite ($file,htmlspecialchars($_POST['text'])); while (!feof($file)) { $data = fgets($file); $line = explode("<>",$data); } fclose($file); ?> タイトルと本文は保存押した後反映されるのですが書き込み日時の文がわかりません汗 タイトル 本文 書き込み日時 タイトル 本文 書き込み日時 このような形で保存していきたいです

    • 締切済み
    • PHP
  • PHPで求めた変数をHTMLで使う方法

    HTMLのformタグで与えた引数を元に、ある値をPHPで求めた後、その求めた変数をHTMLに戻って使う方法をご教授下さい。 例えば、 index.html ↓↓↓ <form action="submit.php" method="post"> <input type="text" name="xxxxx"> <input type="text" name="yyyyy"> <input tyoe="submit" value="実行"> </form> <textarea name="answer"> 実行後ここに、下のPHPで求めた$zzzzzを表示したい。 </textarea> 上のHTMLでxxxxxとyyyyyを入力して実行ボタンを押します。 そしてPHP側は、 submit.php  ↓↓↓ $zzzzz = $_POST["xxxxx"] . "は、" . $_POST["yyyyy"] . "です。"; このように求めた$zzzzzを上のHTMLに戻って表示したいのですが、しばらく調べてみても見つかりませんでした。 どなたかご教授下さい、お願いします。

  • スマホ用PHP掲示板

    PHPで掲示板を簡易的に作ったのですが スマートフォン(iPhone)にも対応したく思います。 端末用にコーティングするにはどのような記述をしたら良いでしょうか。 【ソース】 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ <html> <head><title>TEST</title></head> <body> <p>掲示板</p> <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"> </textarea><br><br> <input type="submit" name="btn1" value="投稿する"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } readData(); function readData(){ $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); $data = "<hr>¥r¥n"; $data = $data."<p>投稿者:".$personal_name."</p>¥r¥n"; $data = $data."<p>内容:</p>¥r¥n"; $data = $data."<p>".$contents."</p>¥r¥n"; $keijban_file = 'keijiban.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp); } ?> </body> </html> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ ご教示の程宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP