デモページ 2015-02-14 : 更新 コメントを追加して、特殊な文字を無効化しました 2013/01/07 : 更新 Chrome での表示で、\n 埋め込まれているデータを <br /> に変換して、実際に改行して見えるようにしました。 Windows Phone(C#) から使うと、エミュレータ内では取得しにくい長い文字列を LOG 等の目的で出力可能です。 1) Google Chrome から実行すると、『掲示板として動作します』 ※ F12 の開発者ツールでデバイスモードにしてから、リセットして UA に適当な文字を入力して再表示すると JSON 表示されます( iPad 等でもいいですが、それではテキスト選択ができません )
![]()
![]()
2) それ以外のブラウザからだと、表示されるのは JSON です
<?php // ************************************** // ブラウザの判定をしています // ( $_SERVER['HTTP_USER_AGENT'] ) // ************************************** $AGENT = ""; if ( strpos( $_SERVER['HTTP_USER_AGENT'], "Chrome") !== false ) { $AGENT = "Chrome"; } // ************************************** // ブラウザが Google Chrome の場合のみ // 通常の HTML として出力します // ※ キャラクタセットは UTF-8 です // ************************************** if ( $AGENT == "Chrome" ) { header( "Content-Type: text/html; Charset=utf-8" ); } else { header( "Content-Type: text/plain; Charset=utf-8" ); } // ************************************** // キャッシュを無効にするヘッダです // ************************************** header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); $log_text = @file_get_contents("./text.log"); // ************************************** // 書き込み処理です // ************************************** if ( $_POST['send'] != "" && $_POST['text'] != "" ) { // ************************************** // 本文中の改行コードを "\n" という // 文字列に変換しています // ************************************** $log_wk = str_replace("\r\n","\\n",$_POST['text']); $log_wk = str_replace("\n","\\n", $log_wk ); $log_wk = str_replace("\r","\\n", $log_wk ); // ************************************** // 特殊な文字を無効化します // ************************************** $log_wk = str_replace("&","&",$log_wk); $log_wk = str_replace("<","<",$log_wk); $log_wk = str_replace(">",">",$log_wk); // シングルクォート $log_wk = str_replace("'","'",$log_wk); // ダブルクォート $log_wk = str_replace("\"",""",$log_wk); // ************************************** // 前回データとの境界に改行コードを // 設定しています // ************************************** $log_text = $log_wk . "\n" . $log_text; file_put_contents("./text.log", $log_text ); if ( $AGENT == "Chrome" ) { // GET メソッドで再表示します header( "Location: {$_SERVER["PHP_SELF"]}" ); exit(); } } // ************************************** // 環境によって必要ありませんが、 // エラー時の設定です // ************************************** error_reporting(E_ALL ^ E_NOTICE); ini_set( "display_errors", "1" ); // ************************************** // Chrome 以外では JSON 文字列で返します // ※ text.log にデータが保存されています // ************************************** if ( $AGENT != "Chrome" ) { ?> { "item" : [ <?php $json_data = @file( "./text.log" ); $cnt = count($json_data); for( $i = 0; $i < $cnt; $i++ ) { if ( $i != 0 ) { print "\t\t,{ \"text\": \"" . chop($json_data[$i]) . "\" }\n"; } else { print "\t\t{ \"text\": \"" . chop($json_data[$i]) . "\" }\n"; } } ?> ] } <? } else { // ************************************** // 記事の境界を hr 要素で表現します // ************************************** $log_text = str_replace("\n", "<hr style='color:#c0c0c0;'>\n", $log_text ); // ************************************** // 本文の改行は br 要素で表現します // ************************************** $log_text = str_replace("\\n", "<br>\n", $log_text ); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=1280,initial-scale=1.0"> </head> <body> <form method="POST"> <textarea name="text" style="width:400px;height:100px;"></textarea> <br> <input type="submit" name="send" value="送信"> </form> <?= $log_text ?> </body> </html> <? } ?>
関連する記事 コマンドプロンプトから Windows PHP を使って POST 投稿する 関連するオンラインツール JSON チェック( JSONLint / The JSON Validator )
タグ:PHP WEBアプリケーション