Alternative to esc_textarea

I need an alternative function to use with textareas in meta boxes instead of esc_textarea.

The problem is that when I use this function with textarea’s it removes line breaks and paragraphs. Is there an alternative function that will keep the line breaks and paragraphs.

Read More

I have tried the validation reference page in the Codex but had no luck finding a function.

Related posts

Leave a Reply

4 comments

  1. esc_textarea shouldn’t strip out newlines — It’s just a thin wrapper around htmlspecialchars: http://core.trac.wordpress.org/browser/tags/3.3.2/wp-includes/formatting.php#L2536

    <?php
    function esc_textarea( $text ) {
        $safe_text = htmlspecialchars( $text, ENT_QUOTES );
        return apply_filters( 'esc_textarea', $safe_text, $text );
    }
    

    That said, there are lots of options. What do you want your users to do have the ability to post? esc_html will escape all special characters (just like esc_textarea). esc_attr(strip_tags($stuff)); is a favorite combination of mine.

    You should also have a look at the data validation page in the codex.

  2. Sorry for the delay but this was the solution I used. Thanks for the feedback.

    $value = esc_html($value);
    $value = html_entity_decode($value);
    
  3. Try this:

    $lines = "Hello !
    From this new line.
    ";
    echo nl2br($lines);
    echo esc_textarea(nl2br($lines));
    

    For me, the output is (but the content-type is text/plain):

    Hello !<br />
    From this new line.<br />
    Hello !&lt;br /&gt;
    From this new line.&lt;br /&gt;
    

    I suggest to you to set your content-type with ‘text/plain’ before.

    header('Content-Type: text/plain');
    

    If the content type is by default set to ‘text/html’, the result will be:

    Hello !
    From this new line.
    Hello !<br /> From this new line.<br />