<?php
/**
 * Vervang bepaalde dingen in aangegeven variabele
 *
 * @param mixed $a
 * @return mixed
 */
function replace_nl ($a)
{
    static $replace = array ("\r" => '\r', "\n" => '\n');

    // check eerst op een array voor mapping
    return (is_array ($a)
        // als het een array is mappen we recursief deze functie erover
        ? array_map ('replace_nl', $a)
        // anders als het een object is ...
        : (is_object ($a)
            // doen we hetzelfde, maar casten we eerst naar array, en
            // uiteindelijk weer naar object
            ? (object) array_map ('replace_nl', (array) $object)
            // anders als het een string is ...
            : (is_string ($a)
                // doen we htmlspecialchars ...
                ? htmlspecialchars (
                    // over een replace ...
                    str_replace (
                        // van de keys van $replace
                        array_keys ($replace),
                        // naar de waardes van $replace
                        array_values ($replace),
                        // op het argument
                        $a
                    )
                )
                // als het iets anders is, gewoon returnen
                : $a
            )
        )
    );
}

/**
 * Netjes een variabele dumpen
 *
 * @return void
 * @uses replace_nl
 */
function dump ()
{
    // als er geen argumenten zijn vooral niks doen...
    if (!func_num_args ())
    {
        return;
    }

    // start output buffering
    ob_start ();

    // loop door alle gegeven argumenten (variabel)
    foreach (func_get_args () as $data)
    {
        // voeren we simpel de functie eroverheen
        $data = replace_nl ($data);
        // dump de variabele
        var_dump ($data);
    }

    // eventjes nette output produceren met <pre> en </pre>,
    // html weggewerkt, en de output iets verbeterd. 
    echo '<pre>' . preg_replace ('~]=>\s+~', '] => ', ob_get_clean ()) . '</pre>';

    // returnen
    return;
}
?>