问题
是否有任何其他不安全的变量类型在不转义的情况下打印到 HTML 页面或 URL?(使用自定义 toString 方法忽略对象)。
背景
我正在编写一个内部库来神奇地清理任何东西(简单的字符串,整数,浮点数等,数组,嵌套数组,对象,......)给定数据的目的地(HTML页面或URL)。
对于字符串,很明显我必须为某些字符串应用htmlspecialchars和/或urlencode。
如果可能的话,我想保留变量的类型,所以如果可能的话,我不想转换整数、浮点数等。
示例代码
这是我的类的一部分的当前状态(请注意,下面的代码还没有考虑对象函数和属性!)
class HogwartsExpress {
private static $URL = 0;
private static $HTML = 1;
// ...
private static function escape_array($arr, $method){
$escaped_arr = array();
foreach ($arr as $k=>$v){
$safe_k = self::escape_non_array($k, $method);
$escaped_arr[$safe_k] = is_array($v) ? self::escape_array($v, $method): self::escape_non_array($v, $method);
}
return $escaped_arr;
}
private static function escape_non_array($val, $method){
if (is_string($val)){
switch ($method){
case self::$URL: return urlencode($val);
case self::$HTML: return htmlspecialchars($val);
}
}
else {
return $val;
}
}
}