未定義かもしれない変数を空文字列にエスケープする

技術関係

環境によって、未定義の変数を使用した際にnoticeが発生するのが面倒くさい。
一々ifで判定するのも面倒くさい。未定義だったら空文字列扱いして欲しい時にhtmlspecialcharsを使用する

htmlspecialchars

<?php
unset($undefine_value);
// Noticeが発生する
echo $undefine_value;
// Noticeは発生しない
echo @htmlspecialchars($undefine_value);
?>

http://php.net/manual/ja/function.htmlspecialchars.php>
返り値
変換後の文字列を返します。
入力の string の中に 文字セット charset における無効なコードユニットシーケンスが含まれており、 かつ ENT_IGNORE フラグが設定されていなければ、 htmlspecialchars() は空文字列を返します。
<<

CakePHPのような短縮形を準備する

CakePHPのように、予め短縮形の関数を宣言しておくのも悪くはない
cake/cake/basics.php

<?
/**
* Convenience method for htmlspecialchars.
*
* @param string $text Text to wrap through htmlspecialchars
* @param string $charset Character set to use when escaping.  Defaults to config value in 'App.encoding' or 'UTF-8'
* @return string Wrapped text
* @link http://book.cakephp.org/view/703/h
*/
function h($text, $charset = null) {
if (is_array($text)) {
return array_map('h', $text);
}
if (empty($charset)) {
$charset = Configure::read('App.encoding');
}
if (empty($charset)) {
$charset = 'UTF-8';
}
return htmlspecialchars($text, ENT_QUOTES, $charset);
}
?>
タイトルとURLをコピーしました