/*------------------------------------------------------------------------------------------------------
唐津市花市場Web取引システム
文字列エスケープ系関数
StringEscape.inc
説明 : e_* : 文字列エスケープ系関数
作成日時 : 2010/12/09
作成者 : K.Matsuo
--------------------------------------------------------------------------------------------------------*/
// htmlの属性
function e_att($s){
$s = mb_ereg_replace("&" , "&" , $s);
$s = mb_ereg_replace("<" , "<" , $s);
$s = mb_ereg_replace(">" , ">" , $s);
$s = mb_ereg_replace("\"", """, $s);
$s = mb_ereg_replace("'" , "'", $s);
$s = mb_ereg_replace("\r", "
", $s);
$s = mb_ereg_replace("\n", "
", $s);
return $s;
}
// e_htmlと異なり、xd_html_text()で生成したデータ(連想配列)の場合はエスケープせずに返す。
function e_html_unsafe($s){
if(xd_is_type($s,"html")){
return xd_value($s);
}
else {
return e_html($s);
}
}
// html
function e_html($s){
return e_html_0($s,false);
}
// html preタグ、textareaタグ内でのエスケープ
function e_html_pre($s){
return e_html_0($s,true);
}
// html
function e_html_0($s, $pre){
$s = mb_ereg_replace("&" , "&" , $s);
$s = mb_ereg_replace("<" , "<" , $s);
$s = mb_ereg_replace(">" , ">" , $s);
$s = mb_ereg_replace("\"" , """ , $s);
$s = mb_ereg_replace("'" , "'" , $s);
if(!$pre){
$s = mb_ereg_replace("\n" , "
" , $s);
$s = mb_ereg_replace("\r" , "" , $s);
}
return $s;
}
//javascriptインジェクション対策
function e_javascr($s){
$s = mb_ereg_replace(" [\\]
$s = mb_ereg_replace("\"" , "\\\"" , $s); // ["] -> [\"]
$s = mb_ereg_replace("'" , "\\'" , $s); // ['] -> [\']
$s = mb_ereg_replace("\n" , "\\n" , $s); // \n -> [\n]
$s = mb_ereg_replace("\r" , "\\r" , $s); // \r -> [\r]
$s = mb_ereg_replace("\t" , "\\t" , $s); // \t -> [\t]
$s = mb_ereg_replace("<" , "\\x3C" , $s); // [<] -> [\x3C]
$s = mb_ereg_replace(">" , "\\x3E" , $s); // [>] -> [\x3E]
return $s;
}
// 数値を表す文字列
function e_num($s){
return "".($s-0);
}
function e_csv_excel($s){
$s = mb_ereg_replace("," ," ", $s); // [,] -> [ ]
$s = mb_ereg_replace("\"" ," ", $s); // ["] -> [ ]
return $s;
}
// 文字列→TSV要素
function e_tsv($s){
$s = mb_ereg_replace("\\\\" ,"\\\\", $s); // [\] -> [\\]
$s = mb_ereg_replace("\t" ,"\\t", $s); // [(タブ)] -> [\t]
$s = mb_ereg_replace("\n" ,"\\n", $s); // [(改行)] -> [\n]
return $s;
}
// TSV要素→文字列
function e_un_tsv($s){
$s = mb_ereg_replace("\\\\n" ,"\n", $s); // [\n] -> [(改行)]
$s = mb_ereg_replace("\\\\t" ,"\t", $s); //[\t] -> [(タブ)]
$s = mb_ereg_replace("\\\\\\\\" ,"\\", $s); // [\\] -> [\]
return $s;
}
// 文字列→system_csv要素
function e_system_csv($s){
$s = mb_ereg_replace("\\\\" ,"\\\\", $s); // [\] -> [\\]
$s = mb_ereg_replace("," ,"\\c", $s); // [,] -> [\c]
$s = mb_ereg_replace("\n" ,"\\n", $s); // [(改行)] -> [\n]
return $s;
}
// system_csv要素→文字列
function e_un_system_csv($s){
$s = mb_ereg_replace("\\\\n" ,"\n", $s); // [\n] -> [(改行)]
$s = mb_ereg_replace("\\\\c" ,",", $s); //[\c] -> [,]
$s = mb_ereg_replace("\\\\\\\\" ,"\\", $s); // [\\] -> [\]
return $s;
}
/* HTML(改行)→HTML(BRタグ) */
function e_html_br($s){
$s = mb_ereg_replace("\n" ,"
", $s); // [(改行)] -> [
]
return $s;
}
/* HTML(BRタグ)→HTML(改行) */
function e_html_debr($s){
$s = mb_ereg_replace("
" ,"\n", $s); //[
] -> [(改行)]
return $s;
}
//=== xd_* : 拡張データ(連想配列にして文字列に付加情報を加える) ========================================
// htmlテキストを表す連想配列を返す
function xd_html_text($s){
return xd_make_data("html", $s);
}
//
function xd_make_data($type, $val){
return array("_xd"=>true, "type"=>$type, "val"=>$val);
}
// $xdが$typeで指定したタイプならtrue
function xd_is_type($xd, $type){
return (xd_is_xd_value($xd) && $xd["type"]==$type);
}
// $xdから値を取得する
function xd_value($xd, $sub="val"){
return xd_is_xd_value($xd) ? $xd[$sub] : null;
}
// is_null, is_scalar, xd_is_xd_valueのいずれかがtrueを返す場合true。
function xd_is_value($s){
return (is_null($s) || is_scalar($s) || xd_is_xd_value($s));
}
// xd_*関数で作られたデータならtrue。
function xd_is_xd_value($s){
// parse_str()ではstring型,null型,array型は作られるが、boolean型は作られない。
// なのでboolean型かどうかをチェックすることで、
// $_POSTなどからの(安全でない)データではないことが保証出来る。
//
// (注) 厳密にはarray()で同じ構造は作れるので、parse_str()で作られていないことは保証出来るが、
// xd_*関数で作られたという保証は無い。
//
// ユーザーからの入力を「任意の名前のキー」で「boolean型の値」を作成するような
// 処理があるとまずいので注意すること。
if(is_array($s) && is_bool($s["_xd"]) && $s["_xd"]==true){
return true;
}
return false;
}
?>