【发布时间】:2013-09-03 15:10:34
【问题描述】:
问题
是否还有其他不安全的variable type 在不转义的情况下打印到 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;
}
}
}
【问题讨论】:
标签: php html url types escaping