PHP5技術者認定上級試験、勉強方法②

PHP5技術者認定上級試験、勉強方法②

PHP5技術者認定上級試験に合格しましたので
その勉強方法等、これから受験する方に向けての記事です。
要点だけまとめましたので試験前にさらっと確認すると良いかと思います。

下記の公式問題集に沿って要点をまとめてみました。
今回は2章の文字列になります。
下記のテキストをやり込めば合格は確実です。

それでは要点だけを解説します。
シングルクォート、ダブルクォート、バックスラッシュ等の特殊文字についてはエスケープシーケンスを用います。

※バックスラッシュは環境によって[¥]と表示されることがあります。以下出力結果

ダブルクォートで囲まれた場合は変数の展開が行われます。※3行目参考
シングルクォートの場合、展開が行われません。※4行目参考



3行目のような書き方をすると変数の名の続きと解釈されエラーになります。
波括弧でくくることで解決できます。



ヒアドキュメントについてです。
複数行にわたる文字を出力するのに便利な機能です。



文字列の出力はecho,print()を使用します。
これらは関数ではなく言語構造と呼ばれます。
引数をくくる括弧を省略できます。
またechoは(,)で区切って記述することが可能です。



printf()関数はフォーマットされた文字列を出力します。
printf(フォーマット、変換する値)のように記述します。



print_r()とvar_dump()の違い。
var_dump()の方が詳細データを出力してくれるといったところでしょうか。



文字数を取得するにはstrlen()、日本語はmb_strlen()を用います。



不要な文字列を削除するには以下の関数があります。



大文字小文字の変換には以下のような関数があります。



その他の文字列置換です。



フォーム内にタグやJavaScriptを含むデータをWebサーバに送信することで意図しない動作をさせる攻撃をクロスサイトスクリプティング攻撃といいます。
例えば以下のような申し込みフォームがあるとします。

通常の入力では何も問題ありません。
しかし以下のようなjavascriptコードを入力します。
<script>alert(“警告!”);</script>

送信ボタンを押下すると・・・。
以下のような申し込みフォームで意図していない動きになりました。

javascriptコード等を入力して意図していない動きをさせることがクロスサイトスクリプティング攻撃です。
対策としてstrip_tags()関数があります。
セキュリティ対策がされていないコードが下記です。

strip_tags()関数を利用して下記のようにします。

するとタグが取り除かれてテキストのみ
<script>alert(“警告!”);</script>でいうalert(“警告!”)のみがポストされて意図した動きになります。
以下表示結果です。

その他の対策はhtmlentities()関数というものがあります。
「<」「>」「”」をそれぞれ「&lt;」「&gt;」「&quot;」に置き換えて無力化します。
下記のように表示されます。

ソースコードは以下の通りでなっています。

またアクセント記号やウムラウト付き文字の置換も行いますが
htmlspecialchars()関数では行われません。



get_meta_tags()ではmetaタグ情報を読み取って連想配列で返します。

出力結果↓



google検索を行う場合に我々日本人は日本語で検索をします。
例えば「ふくたく」と検索するとします。
https://www.google.com/search?q=”検索キワード”が入って
https://www.google.com/search?q=”ふくたく”となりますが日本語はそのままでは使えませんので
エンコードを行い検索を可能にします。
ちなみにURLに表示された https://www.google.com/search?q=ふくたく をコピーしてメモ帳に貼り付けてみましょう。下記のようになります。

エンコードされています。
以上のように日本語はエンコード処理をかける必要があります。
エンコードはurlencode()、rawurlencode()関数があります。
これらの違いは処理の違いです。



受信側ではエンコードされた文字を元に戻して(デコード処理して)取得します。
urldecode()、rawurldecode()関数です。



文字列の比較についてです。
==演算子で文字列を比較する場合、数値にキャストされます。
以下のように変換された後、比較されることを覚えておきましょう。



strcmp()関数やstrcasecmp()関数は文字列を比較します。
strcasecmp()の方は小文字に変換して比較します。
等しければ0を出力します。



文字列の分解結合です。
explode()関数では区切り文字で分割して配列で返します。
implode()関数では区切り文字で配列を結合します。



strtok()関数は文字列を区切り文字で分解して、分解した文字を返します。
ただし2番目以降の文字を返す書式は5行目、7行目になります。



sscanf()関数は複雑な文字列を分解することができます。



parse_url()関数はスキーム(プロトコル)、ホスト(FQDN)、パスに分解します。



strpos()関数は指定キーワードが最初に現れる位置を返します。
strrpos()関数は指定キーワードが最後に現れる位置を返します・


strstr()関数はstrpos()同様に、文字列からキーワードが最初に現れる位置を検索しますが、見つかった位置から末端までを返します。
 stristr()関数はstrstr()関数と同様ですが小文字、大文字を区別しません。



strstr()関数と同様にstrchr()関数は文字列からキーワードが最初に現れる位置から末端までを返します。
strrchr()関数は文字列からキーワードが最後に現れる位置から末端までを返します。



strspn()関数は指定した文字だけで構成される部分を先頭から探します。
※3行目は2だけからなる部分は1つだけです。



strcspn()関数は指定した文字を除いて構成される部分を先頭から探します。




本記事は以下の書籍を参考にしています。