在 code igniter xssclean helper 中弃用了 each
Deprecated each in code igniter xssclean helper
我有一个名为 xssclean 的 codeigniter 助手,用于输入验证表单数据
如果我给出数组,它会显示每个已弃用的错误。
这是我在 xssclean_helper.php
中的函数
function xssclean($str) {
if (is_array($str)) {
while (list($key) = each($str)) {
$str[$key] = $xssclean($str[$key]);
}
return $str;
}
$str = _remove_invisible_characters($str);
$str = preg_replace('|\&([a-z\_0-9]+)\=([a-z\_0-9]+)|i', _xss_hash() . "\1=\2", $str);
$str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\1;\2", $str);
$str = preg_replace('#(&\#x?)([0-9A-F]+);?#i', "\1\2;", $str);
$str = str_replace(_xss_hash(), '&', $str);
$str = rawurldecode($str);
$str = preg_replace_callback("/[a-z]+=([\'\"]).*?\1/si", '_convert_attribute', $str);
$str = preg_replace_callback("/<\w+.*?(?=>|<|$)/si", '_html_entity_decode_callback', $str);
$str = _remove_invisible_characters($str);
$str = _remove_tabs($str);
$str = _never_allowed_str($str);
$str = _never_allowed_regx($str);
$str = str_replace(array('<?', '?' . '>'), array('<?', '?>'), $str);
$str = _never_allowed_words($str);
do {
$original = $str;
if (preg_match("/<a/i", $str)) {
$str = preg_replace_callback("#<a\s+([^>]*?)(>|$)#si", '_js_link_removal', $str);
}
if (preg_match("/<img/i", $str)) {
$str = preg_replace_callback("#<img\s+([^>]*?)(\s?/?>|$)#si", '_js_img_removal', $str);
}
if (preg_match("/script/i", $str) OR preg_match("/xss/i", $str)) {
$str = preg_replace("#<(/*)(script|xss)(.*?)\>#si", '', $str);
}
} while ($original != $str);
unset($original);
$event_handlers = array('[^a-z_\-]on\w*', 'xmlns');
$str = preg_replace("#<([^><]+?)(" . implode('|', $event_handlers) . ")(\s*=\s*[^><]*)([><]*)#i", "<\1\4", $str);
$naughty = 'alert|applet|audio|basefont|base|behavior|bgsound|blink|body|embed|expression|form|frameset|frame|head|html|ilayer|iframe|input|isindex|layer|link|meta|object|plaintext|style|script|textarea|title|video|xml|xss';
$str = preg_replace_callback('#<(/*\s*)(' . $naughty . ')([^><]*)([><]*)#is', '_sanitize_naughty_html', $str);
$str = preg_replace('#(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', "\1\2(\3)", $str);
$str = _never_allowed_str($str);
$str = _never_allowed_regx($str);
return $str;
}
在第 3 行出现错误
each()
函数已在 PHP 7.2 中弃用。但是您可以用 foreach 循环替换 while 循环:
function xssclean($str) {
if (is_array($str)) {
foreach($str as &$value){
$value = xssclean($value);
}
return $str;
}
// …
}
$value
变量默认是数组值的副本。 &
使其成为参考,这样您就可以更新值。
在遍历数组的同时对其进行操作不是一个好主意,并且可能会导致错误。
我有一个名为 xssclean 的 codeigniter 助手,用于输入验证表单数据
如果我给出数组,它会显示每个已弃用的错误。
这是我在 xssclean_helper.php
中的函数function xssclean($str) {
if (is_array($str)) {
while (list($key) = each($str)) {
$str[$key] = $xssclean($str[$key]);
}
return $str;
}
$str = _remove_invisible_characters($str);
$str = preg_replace('|\&([a-z\_0-9]+)\=([a-z\_0-9]+)|i', _xss_hash() . "\1=\2", $str);
$str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\1;\2", $str);
$str = preg_replace('#(&\#x?)([0-9A-F]+);?#i', "\1\2;", $str);
$str = str_replace(_xss_hash(), '&', $str);
$str = rawurldecode($str);
$str = preg_replace_callback("/[a-z]+=([\'\"]).*?\1/si", '_convert_attribute', $str);
$str = preg_replace_callback("/<\w+.*?(?=>|<|$)/si", '_html_entity_decode_callback', $str);
$str = _remove_invisible_characters($str);
$str = _remove_tabs($str);
$str = _never_allowed_str($str);
$str = _never_allowed_regx($str);
$str = str_replace(array('<?', '?' . '>'), array('<?', '?>'), $str);
$str = _never_allowed_words($str);
do {
$original = $str;
if (preg_match("/<a/i", $str)) {
$str = preg_replace_callback("#<a\s+([^>]*?)(>|$)#si", '_js_link_removal', $str);
}
if (preg_match("/<img/i", $str)) {
$str = preg_replace_callback("#<img\s+([^>]*?)(\s?/?>|$)#si", '_js_img_removal', $str);
}
if (preg_match("/script/i", $str) OR preg_match("/xss/i", $str)) {
$str = preg_replace("#<(/*)(script|xss)(.*?)\>#si", '', $str);
}
} while ($original != $str);
unset($original);
$event_handlers = array('[^a-z_\-]on\w*', 'xmlns');
$str = preg_replace("#<([^><]+?)(" . implode('|', $event_handlers) . ")(\s*=\s*[^><]*)([><]*)#i", "<\1\4", $str);
$naughty = 'alert|applet|audio|basefont|base|behavior|bgsound|blink|body|embed|expression|form|frameset|frame|head|html|ilayer|iframe|input|isindex|layer|link|meta|object|plaintext|style|script|textarea|title|video|xml|xss';
$str = preg_replace_callback('#<(/*\s*)(' . $naughty . ')([^><]*)([><]*)#is', '_sanitize_naughty_html', $str);
$str = preg_replace('#(alert|cmd|passthru|eval|exec|expression|system|fopen|fsockopen|file|file_get_contents|readfile|unlink)(\s*)\((.*?)\)#si', "\1\2(\3)", $str);
$str = _never_allowed_str($str);
$str = _never_allowed_regx($str);
return $str;
}
在第 3 行出现错误
each()
函数已在 PHP 7.2 中弃用。但是您可以用 foreach 循环替换 while 循环:
function xssclean($str) {
if (is_array($str)) {
foreach($str as &$value){
$value = xssclean($value);
}
return $str;
}
// …
}
$value
变量默认是数组值的副本。 &
使其成为参考,这样您就可以更新值。
在遍历数组的同时对其进行操作不是一个好主意,并且可能会导致错误。