質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

325閲覧

PHP、本日の日付を出力する関数

heysuky

総合スコア21

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/05 05:00

本日の日付を取得するという課題で間違いがないかお助け願えないでしょうか?
一応これでエディタには正しく表示されているのですが、何か気を付けることはありますか?
あと、htmlspecialcharsという関数は書くのが必須と書かれていたので書いてみたのですが、書き方合っていますでしょうか?
よろしくお願い致します。

html

1<?php 2$date = date('Y/m/d l'); 3 4$date = htmlspecialchars($date, ENT_QUOTES, 'UTF-8'); 5print $date; 6?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

書き方合っていますでしょうか?

間違っている訳じゃありませんが、どちらかというと、変数に代入しない方が良いです。
出力する直前に(=出力するときに)実行する関数だからです。

PHP

1<?php 2$date = date('Y/m/d l'); 3 4print htmlspecialchars($date, ENT_QUOTES, 'UTF-8');

投稿2019/03/05 06:28

編集2019/03/05 06:30
otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2019/03/05 06:33

そうなのですね。教科書にそのような書き方が載っていたので真似して書いたのですが、以降気を付けるよう意識します。 回答ありがとうございます。
m.ts10806

2019/03/05 06:38

ここですね。 https://qiita.com/rana_kualu/items/11cd41de5f0364ba2ee8 の「エスケープ」->ありがちな間違いの2つ目 >場所が離れている場合、その変数がエスケープされたか否か、HTMLエスケープしたか否か、わからなくなりがちです。 エスケープは必ず出力するそのときにその場所で行います
guest

0

ベストアンサー

書き方については、特に問題なし。
「htmlspecialcharsという関数は書くのが必須と書かれていた」と仰っていますがこれはXSS対策のためという意味合いが強いです。
画面出力時に対応する癖をつけるのは非常に良いことですが、「何が入っているかわからない情報」、例えば入力フォームから送信された情報とか、データベースから取り出した情報とか、対しては必須と言ってもいいですが、
今回のように、システム側から払い出していて何がくるか保証されているような情報に対しては必ずしも必須ではありません。

もしhtmlspecialchars()が効いているか確かめたい、ということでしたら、何でもいいのでHTMLタグを含むと良いです。

php

1$date = date('Y/m/d l'); 2 3$date = htmlspecialchars("<p>".$date."</p>", ENT_QUOTES, 'UTF-8'); 4print $date;

ブラウザで見たときに

<p></p>がそのまま出力されていれば成功です。

そこで「ソースを表示」としたときに下記のようになっているはず。
&lt;p&gt;2019/03/05 Tuesday&lt;/p&gt;

投稿2019/03/05 05:09

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2019/03/05 06:05

XSS対策と確かに書いてありました。 よくわからなかったので調べてみたのですが悪意のあるリンク等を踏まないようにするためなのですね。 ということはこのような日付の出力の場合特に必要ではなく、なくても正解という認識で合っているでしょうか。 回答ありがとうございます。
m.ts10806

2019/03/05 06:09

> 悪意のあるリンク等を踏まないようにするためなのですね。 というより、この対応をしていないと、JavaScriptとか埋め込んで作動させたりHTML壊したり、色々悪さができるんですよね。 その悪さのうちに「悪意のあるリンクを埋め込む」もできなくはない、といったところでしょうか。 対応方法は「HTMLエスケープ」とも言われます。 >ということはこのような日付の出力の場合特に必要ではなく、なくても正解という認識で合っているでしょうか。 そうですね。そこは回答の通りです。 ただ「全ての出力箇所にHTMLエスケープを入れる」という意識は素晴しいので、「なくていい」ではなく「基本は入れる」認識でいたほうがいいかもしれません。 HTMLエスケープ対応する意味や理由がわかれば適切に取り扱うことができますので。
heysuky

2019/03/05 06:24

詳細ありがとうございます。とても分かりやすいです。 調べたら関数化してHTMLエスケープを入れやすくする方法を見つけたので実践していこうと思います。 回答ありがとうございました。
m.ts10806

2019/03/05 06:27

そうですね。同じ第2、第3引数を使うのなら長い名称なので第1引数用の変数を引数で渡すだけの短名なラッパー関数を作るのは有用です。 他の機能でも同じことが言えるので、なるべく同じ処理は共通化してスマートなコードを書けるように工夫してみてください
guest

0

間違っています。
そのdate('Y/m/d l')は、「PHPが実行されているOSに定義されている現在日」の情報が返答されます。
仮にPHPが実行されるOSの時計がズレている場合、そのズレた時間に対応する日が返答されます。
が、普通はOS上の時計がズレないような措置を別途行っておくので、この値で正しいとしています。

functionの使い方等はマニュアルを読んで下さい。
http://php.net/manual/ja/function.htmlspecialchars.php

投稿2019/03/05 05:05

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heysuky

2019/03/05 06:02

読ませて頂きました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問