Uglavnom, ako nekom trebaju funkcije za čišćenje stringova i prosta zamena var_dump koja je otporna na XSS može da proba ove funkcije:
PHP kôd:
/**
* Equivalent to htmlspecialchars(), but allows &#[0-9]+ (for unicode)
*
* @access public
* @param string $str
* @return string
*/
function clean($str) {
$str = preg_replace('/&(?!#[0-9]+;)/s', '&', $str);
$str = str_replace(array('<', '>', '"'), array('<', '>', '"'), $str);
return $str;
} // clean
/**
* This function will return clean variable info
*
* @param mixed $var
* @param string $indent Indent is used when dumping arrays recursivly
* @param string $indent_close_bracet Indent close bracket param is used
* internaly for array output. It is shorter that var indent for 2 spaces
* @return null
*/
function clean_var_info($var, $indent = ' ', $indent_close_bracet = '') {
if(is_object($var)) {
return 'Object (class: ' . get_class($var) . ')';
} elseif(is_resource($var)) {
return 'Resource (type: ' . get_resource_type($var) . ')';
} elseif(is_array($var)) {
$result = 'Array (';
if(count($var)) {
foreach($var as $k => $v) {
$k_for_display = is_integer($k) ? $k : "'" . clean($k) . "'";
$result .= "\n" . $indent . '[' . $k_for_display . '] => ' . clean_var_info($v, $indent . ' ', $indent_close_bracet . $indent);
} // foreach
} // if
return $result . "\n$indent_close_bracet)";
} elseif(is_int($var)) {
return '(int)' . $var;
} elseif(is_float($var)) {
return '(float)' . $var;
} elseif(is_bool($var)) {
return $var ? 'true' : 'false';
} elseif(is_null($var)) {
return 'NULL';
} else {
return "(string) '" . clean($var) . "'";
} // if
} // clean_var_info
Prva je preuzeta iz punBBa, a drugu sam napisao kada su mi prijavili XSS propust u var_dumpu. Druga je daleko od potpune jer ne radi kompletan dump podataka o objektu, ali za neke jednostavnije stvari je i više nego dovoljna.