• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
why CI have to Standardizes newline? it changes 1 newline to double newline (CI2.0)

#1
[eluser]vee[/eluser]
in textarea form
if user enter one newline CI change it to double newline
like this

Quote:line 1
line2

to

Code:
line 1

line 2

is it a bug? how to fix it?
>:-(

#2
[eluser]kipras[/eluser]
I have the same problem

#3
[eluser]Future Webs[/eluser]
related post here

http://ellislab.com/forums/viewthread/180436/

https://bitbucket.org/ellislab/codeignit...duplicated

#4
[eluser]vee[/eluser]
this is my fix
http://www.okvee.net/2011/02/16/xss-filt...-new-line/

this double new line is very ugly bug and occurs when using $_POST or $_GET

create MY_Input.php in application/core

Code:
class MY_Input extends CI_Input {

    function  __construct() {
        parent::__construct();
    }// __construct

    // --------------------------------------------------------------------

    /**
    * Clean Input Data
    *
    * This is a helper function. It escapes data and
    * standardizes newline characters to \n
    *
    * @access   private
    * @param    string
    * @return   string
    */
    function _clean_input_data($str)
    {
        if (is_array($str))
        {
            $new_array = array();
            foreach ($str as $key => $val)
            {
                $new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($val);
            }
            return $new_array;
        }

        // We strip slashes if magic quotes is on to keep things consistent
        if (function_exists('get_magic_quotes_gpc') AND get_magic_quotes_gpc())
        {
            $str = stripslashes($str);
        }

        // Clean UTF-8 if supported
        if (UTF8_ENABLED === TRUE)
        {
            $str = $this->uni->clean_string($str);
        }

        // Should we filter the input data?
        if ($this->_enable_xss === TRUE)
        {
            $str = $this->security->xss_clean($str);
        }

        // Standardize newlines if needed
        if ($this->_standardize_newlines == TRUE)
        {
            if (strpos($str, "\r") !== FALSE)
            {
                $str = str_replace(array("\r\n", "\r"), "\n", $str);
            }
        }

        return $str;
    }
}

/* end of file */

#5
[eluser]Future Webs[/eluser]
thanks man,

that seemed to have sorted it for now while we wait for it to get resolved in the official version

#6
[eluser]squirrels[/eluser]
That doesn't work. I think we have a problem with double replacement in the str_replace function. So we replace all "\r\n", "\n", and "\r" with a dummy character that shouldn't be finding itself in the data, then change him to PHP_EOL. I picked the delete character ASCII code 127. I also threw in the "\n" character for the Mac operating system.

// Standardize newlines if needed
if ($this->_standardize_newlines == TRUE)
{
if (strpos($str, "\r") !== FALSE)
{
$str = str_replace(array("\r\n", "\n", "\r"), chr(127), $str);
$str = str_replace(chr(127), PHP_EOL, $str);
}
}

#7
[eluser]furball[/eluser]
will this work?

Code:
// Standardize newlines if needed
        if ($this->_standardize_newlines == TRUE)
        {
            if (strpos($str, "\r") !== FALSE)
            {
                //$str = str_replace(array( "\r\n", "\r"), PHP_EOL, $str);
                $str = preg_replace('/(?:\r\n|[\r\n])/', PHP_EOL, $str);

            }
        }

#8
[eluser]squirrels[/eluser]
Furball has the winning solution.

I think we should standard new lines if the string contains a "\r" or a "\n". The conditional statement needs to be changed. I just removed it.


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2021 MyBB Group.