dtiopy6088 2010-06-30 14:51
浏览 39

有换行符的FILTER_SANITIZE_SPECIAL_CHARS问题

Does anybody know how to prevent FILTER_SANITIZE_SPECIAL_CHARS from converting the line breaks ( ) into ( &#10 ; ).

I'm developing a simple commenting system for my website and I found that the php filter converts to so when using nl2br() there are no line breaks.

help please.

thanks :)

  • 写回答

1条回答 默认 最新

  • duanhao8540 2010-06-30 15:33
    关注

    filter_var with the FILTER_SANITIZE_SPECIAL_CHARS option is doing what it is supposed to do:

    HTML-escape '"<>& and characters with ASCII value less than 32, optionally strip or encode other special characters.

    The newline character ( ) has an ASCII value of less than 32, so will be converted to &#10;. You could therefore use html_entity_decode to convert them back to their original characters:

    $string = "line 1
    line 2";
    $filtered = filter_var($string, FILTER_SANITIZE_SPECIAL_CHARS);
    echo "$filtered
    ";
    echo(html_entity_decode($filtered));
    

    Outputs:

    line 1&#10;line 2
    line 1
    line 2
    

    But I guess that defeats the object of using FILTER_SANITIZE_SPECIAL_CHARS in the first place.

    If it is only the newline that is causing the problem, you could replace the HTML character entity (&#10;) with a newline character, before using nl2br():

    echo str_replace('&#10;', "
    ", $filtered);
    

    Outputs:

    line 1
    line 2
    

    Or perhaps even better, skip the middle step, and replace the HTML character entity (&#10;) with <br />:

    echo str_replace('&#10;', '<br />', $filtered);
    

    Outputs:

    line 1<br />line 2
    

    ...but I'm not 100% sure what it is you are trying to do.

    评论

报告相同问题?