• ベストアンサー

なぜ何も表示されないのか?

●質問の主旨 下記のコードを使って、 <b>てすと</b> と表示させたいのですが、 画面には何も表示されません?なぜでしょうか? 参考文献の通り、コードを打ち込み、 特にエラーが出ているわけではありません。 ご存知の方よろしくお願いします。 ●参考文献 西沢直木 PHPプログラミングの教科書P128 ●コード <?php function h($a) { return htmlspecialchars($a, ENT_QUOTES, "UTF-8"); } $a ="<b>てすと</b>"; $a = h($a); echo $a; ?>

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>特にエラーが出ているわけではありません。 エラーメッセージが表示される環境でしょうか? 明らかにエラーになる記述をしてみてちゃんとエラーが表示されるか確認してください(もちろんphpinfo()で設定を確認してもいいです)。 なお提示されたソースにはエラーになる原因はありません。私の手元(Win7+xampp1.8.1)では問題なく動作します。 ちなみにソースをsjisで保存していると、htmlspecialcharsで指定している文字セットが違うので「何も返らない」ことにはなりますが、utf-8でないといけないことは自明ですからその点は大丈夫ですよね?

dradra33
質問者

お礼

agunuzさま いつもご回答ありがとうございます。 補足もご確認いただければ幸いです。

dradra33
質問者

補足

〉ソースをsjisで保存していると、htmlspecialcharsで指定している文字セットが違うので「何も返らない」ことにはなりますが ファイルの文字コードを確認すると、 sjisでした。それをutf-8に変えると、、 <b>てすと</b>を表示できました。 ただし、eclipseの環境でテキストファイルの文字コード http://www.javadrive.jp/eclipse3/setup/index1.html に従って、文字コードをutf-8に変えて実行すると 文字化けしました。これはこんなものなのでしょうか? またeclipseの環境でデフォルトの状態では、 何も表示されませんでした。 >明らかにエラーになる記述をしてみてちゃんとエラーが表示されるか確認してください(もちろんphpinfo()で設定を確認してもいいです)。 他のPHPファイルで試したところ、エラー表示はされます。 ただphpinfo()で設定を確認する方法というのは、 よくわかりません。

その他の回答 (2)

noname#244856
noname#244856
回答No.3

先ほどの回答は「書き足す」のではなく「書き換える」の意味で提示したのですがww 当然2回もh関数をdeclare出来るわけないですよね( 原因は文字コードの違いでしたか。 Eclipseについてはこれが参考になるかな? http://kaworu.jpn.org/kaworu/2009-01-10-1.php もちろんエンコーディングををUTF-8(正確にはUTF-8N)にするだけではなく、改行コードもCRLFからLFにしておいてくださいね。

dradra33
質問者

お礼

To_aru_Userさま たびたびご回答ありがとうございます。 上記のURLで、 Preferences → General →  Conent types Preferences → General →  Workspace のそれぞれで文字化けを防ぐ方法を 試してみました。 しかしどちらの方法でも、 文字化けを起こしてしまいます。 もし他の方法をご存知でしたらご教示願います。 お忙しいところ恐れ入ります。

noname#244856
noname#244856
回答No.2

--PHP start-- <?php function h($input) { return htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); } $a = '<b>てすと</b>'; $a = h($a); echo $a; ?> --PHP end-- 試しに上記で実行してみてください。 もしも「--PHP start--」だけが表示されるなら何らかのエラーが起こっています。 「--PHP start--」と「--PHP end--」が表示されるならPHPがインストールされていません。

dradra33
質問者

お礼

To_aru_Userさま ご回答ありがとうございます。 回答:No.1でのご指摘により、 文字コードをUTF-8に変えた上で、 上記のコードを実行すると、 下記のエラーが表示されます。 \shopは私が任意で作ったフォルダです。 Fatal error: Cannot redeclare h() (previously declared in C:\xampp\htdocs\shop\test2.php:3)

関連するQ&A

  • PHPの入力フォームの確認画面の構文エラー

    <?php session_start(); require_once "define.php"; echo "<b>質問内容</b><br>"; echo "タイトル : ".htmlspecialchars($_SESSION[TITLE], ENT_QUOTES)."<br>"; echo "URL : ".htmlspecialchars($_SESSION[URL], ENT_QUOTES)."<br>"; echo "メール : ".htmlspecialchars($_SESSION[MAIL], ENT_QUOTES)."<br>"; echo "<br>質問ありがとうございました。<br><br>"; echo "<a href=\"./index.php\">入力フォームに戻る</a>"; ?> こういう感じのPHPの構文を書いたんですがなぜか echoで表示してあるタイトル、URL、メールのところが ちゃんと表示されません define.phpは間違いなくちゃんとファイルとして書いてあります どこか間違っているところがあるのでしょうか? 原因がわかりません、一日中悩んだけど 答えがわかりません、どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • 特殊文字のエスケープについて

    今PHPを勉強しています。全くの初心者なので、本を頼りにやっているのですが、エスケープの所がうまく行きません。分かる方がいたら教えて下さい。お願い致します。 <?php //データを受け取る $text1 = @$_POST["text1"]; //特殊文字をエスケープする $text2 = htmlspecialchars($text1); //エスケープ後の値を表示する echo "<p>エスケープ後:".$text2; //「ENT_QUOTES」を指定したとき echo "<p>ENT_QUOTES:".htmlspecialchars($text1, ENT_QUOTES); //「ENT_NOQUOTES」を指定したとき echo "<p>ENT_NOQUOTES:".htmlspecialchars($text1, ENT_NOQUOTES); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1" value="<?php echo $text2?>"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> を実行して、<b>"太字"</b>を送信すると「"」の前に「\」が入ってしまいます。本では、<b>"太字"</b>のまま表示されるようなんです。。 文字コードはEUCで保存しています。

    • 締切済み
    • PHP
  • php 送信されたフォームについて

    送信されたフォームの受け取る側のソースを書いたのですが、 <?php $i = 0; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; print('正解数'.$i./4'です'); ?> を付け加えるとエラーが表示されます。エラーの対象になっているのは print('正解数'.$i./4'です');らしいのですが、なぜエラーになるのかわかりません 回答お願いします。 以下ソースです。 <html> <head> <title>解答</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style type=""text/css""> #container{ width:1000 } #main{ width:500px; float:right; } #sidebar{ width:500px; float:left; } </style> </head> <body> <div id="container"> <div id="main"> <p>問題の解答</p> <p>問1</p> <p>(1)(2)(3)(4)</p> <p>問2</p> <p>(1)(2)(3)(4)</p> <p>問2</p> <p>(1)(2)(3)(4)</p> </div> <div id="sidebar"> <p><>あなたの解答<></p> <p>問1</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran11'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran12'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran13'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran14'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問2</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran21'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran22'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran23'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran24'], ENT_QUOTES, 'UTF-8')); ?> </p> <p>問3</p> <p>(1)<?php print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')); ?> (2)<?php print(htmlspecialchars($_POST['kaitouran32'], ENT_QUOTES, 'UTF-8')); ?> (3)<?php print(htmlspecialchars($_POST['kaitouran33'], ENT_QUOTES, 'UTF-8')); ?> (4)<?php print(htmlspecialchars($_POST['kaitouran34'], ENT_QUOTES, 'UTF-8')); ?> </p> </div> </div> <?php $i = 0; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; if(print(htmlspecialchars($_POST['kaitouran31'], ENT_QUOTES, 'UTF-8')) == 'a') $i++; print('正解数'.$i./4'です'); ?> </body> </html>

    • 締切済み
    • PHP
  • 下記のコードはXSS脆弱ですか?(HTMLのmetaタグrefresh)

    もし私がユーザ認証のあるサービスを運営していると仮定して、 下記のコードが、私のサイトにあると危険ですか? 以下の場合、javascript: から始まるコードを実行されるので危険だと思います。 <META HTTP-EQUIV="Refresh" CONTENT="0; URL=<?php echo htmlspecialchars($_GET['path'], ENT_QUOTES); ?>"> 下記の場合なら安全ですか? <META HTTP-EQUIV="Refresh" CONTENT="0; URL=index2.php<?php echo htmlspecialchars($_GET['path'], ENT_QUOTES); ?>"> つまり、URLの後ろの、javascript: が実行されることはありますか?

    • 締切済み
    • PHP
  • SESSION変数について

    プログラム初心者です htmlspecialcharsを省略するか迷っています SESSION変数を表示するときはhtmlspecialcharsを使ったほうがいいでしょうか? $id = htmlspecialchars($_SESSION['id'], ENT_QUOTES); echo $id; よろしくおねがいします

    • ベストアンサー
    • PHP
  • ヒアドキュメントと、htmlspecialcharsの違いを教えて下さい。

    PHPのセキュリティを強化しようと勉強しているのですが わからないことがあります。 セキュリティの本には、変数の出力の場合は、 htmlspecialcharsで書くべきと載っていますが、 これまでヒアドキュメントで書いていた部分も、 htmlspecialcharsに直す必要があるのでしょうか? ■ヒアドキュメント echo<<<EOD $hogehoge EOD; ■htmlspecialchars echo htmlspecialchars($hogehoge,ENT_QUOTES,'UTF-8'); この二つの違いと、 どちらがセキュリティとして良いかのかを教えて下さい。

    • ベストアンサー
    • PHP
  • フォーム入力情報を確認表示させたいのですが

    フォーム入力情報を確認表示させたいのです。 他の値はcheck.phpで表示されるのに、氏名(name)だけが表示されないのです。 原因がわからず作業が進まない状態です、、、回答よろしくお願いします。 index.html------------------------ <dt><em>氏名 </em><hi>必須</hi></dt> <dd> <input type="text" name="name" size="20" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>" /> <?php if ($error['name'] == 'blank'): ?> <p class="error"><pred>* 氏名を入力してください</pred></p> <?php endif; ?> </dd> ---------------------------------- check.php-------------------------- <dt><em>氏名</em></dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['name'], ENT_QUOTES, 'UTF-8'); ?> </dd> ----------------------------------

    • 締切済み
    • PHP
  • フォームで送られてきたメールの内容が消える。

    PHP初心者です。 メールフォームを作成し送信すると、メールは届くのですが、 メールの内容★の部分が消えてしまっています。 名  前: ★★ タイトル: ★★ メルアド: ★★ 内  容: ★★ ソース <?php $name= htmlspecialchars($_POST['name'],ENT_QUOTES); $title= htmlspecialchars($_POST['title'],ENT_QUOTES); $email= htmlspecialchars($_POST['email'],ENT_QUOTES); $naiyo= htmlspecialchars($_POST['naiyo'],ENT_QUOTES); $to="aaa@bbb.co.jp"; $subject = "ASK"; $message=" 名  前: $name \n タイトル: $title \n メルアド: $email \n 内  容: $naiyo \n"; if(mail($to,$subject,$message)) { echo "Thank you, your email has been send."; } else { echo "Sorry but there is an error. Try again please."; } ?> どなたかアドバイスをお願いします。

    • ベストアンサー
    • PHP
  • PHPでCSVデーターの表示について

    PHPでCSVデーターの表示について 教えてください。PHPでCSVデーターを表示したいのですが一覧表示ではなくテキストをクリックして特定のデーターを表示させようと考えております。 CSVデーターの中身(CSV.csv) 一郎,男,20歳 二郎,男,22歳 一子,女,24歳 二子,女,26歳 --data.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<p>',<a href="01.php">' . $name . '</a>','</p>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 一郎をクリックしたら一郎のデーターだけを(01.php)で表示させたいのですがよく分りません。 01.phpは今のところ一覧表示されるものを置いてあります。 --01.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<table border=1>'; echo '<tr>'; echo '<td>','名前','</td>'; echo '<td>'.$name.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','性別','</td>'; echo '<td>'.sex.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','年齢','</td>'; echo '<td>'.$age.'</td>'; echo '</tr>'; echo '</table>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 本を読んだり、ググったりしてヒントになる様な物を探しているのですが中々見つかりません。 初心者で申し訳ありませんが、どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • POSTされたデータをそのまま変数名にするような・・・

    お世話になります。 タイトルのとおりなのですが、POSTされたデータをそのまま変数名にするような便利な方法はないでしょうか。 $name=htmlspecialchars($_POST["name"], ENT_QUOTES, $code); $email=htmlspecialchars($_POST["email"], ENT_QUOTES, $code); ・ ・ ・ をたくさんあるので簡単にできないかなーと思ったんですが、何か良い方法がありましたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう