smartweb 发表于 2011-3-4 21:26:42

CI对文本文件操作,多行文本textarea 读和存有问题。

view:
<textarea id="readtxt" name="readtxt" style="width:100%;height:300px;" ><?php echo set_value('readtxt',$readtxt); ?></textarea>

Control:
//存
if(read_file($txt))
{//读
$output=read_file($txt);
}
else
{
$output="User-agent: *
Allow: /
Sitemap: http://".$_SERVER['SERVER_NAME']."/sitemap.xml";
write_file($txt, $output,'a+');
}
$output=str_replace("\n","",$output);
$data['readtxt']=$output;


--------------------------------
//取出,上一步保存的txt无问题,但下面再存一下就多了好多格
$output=$this->input->post('readtxt');
$output=(str_replace("","\n",$output));
write_file($txt, $output,'r+');
$data['success'] = '<div class="suc">更新成功!</div>';
$output=read_file($txt);
$output=str_replace("\n","",$output);
$data['readtxt']=$output;
$this->load->view('admin/setting/edit_txt',$data);

Hex 发表于 2011-3-4 22:13:40

到底想做什么?没太看明白。

smartweb 发表于 2011-3-5 09:26:37

对robots.txt操作
1:不存在robots.txt就自动生成
2:robots.txt在多行文本textarea 读出,能修改和保存。
但保存的robots.txt用记事本打开会有多余的空格,但网页上打开没问题。

Hex 发表于 2011-3-5 22:21:59

这个你需要用 var_dump 来分析下,跟 CI 没什么关系。

smartweb 发表于 2011-3-6 19:15:01

var_dump($output) ;

都没有见到换行的。
======>
ing(60) "User-agent: * Allow: / Sitemap: http://127.0.0.1/sitemap.xml"

Hex 发表于 2011-3-6 21:28:42

那保存也不会出现空格。
除非 PHP 保存文件函数有问题,不过这个可能性是0% 呵呵

linkipod 发表于 2011-3-10 16:39:00

本帖最后由 linkipod 于 2011-3-10 17:29 编辑

我用CI2.0也发现了这个问题,很明显这是CI的一个严重bug,CI1.7.2没发现这样的问题。具体现象是,提交textarea时候 如果里面包括换行符 \n ,在接收的时候换行符会被复制一次,如果是html标签,也是一样。textarea里面不能有html标签,真是很郁闷,早知道不迁移到2了。我仔细检查了提交和输入的所有代码,没有任何问题,新建一个原始php文件测试,一切正常,换成CI,问题依旧,估计是CI销毁了post的值,然后自己又重新生成了一份,我很郁闷的是,为什么只重复html标签,不重复文本域里面的文字

去找了半天CI的核心输入输出文件
发现应该是在这里出了问题 system/core/Input.php第506-512行
                if ($this->_standardize_newlines == TRUE)
                {
                        if (strpos($str, "\r") !== FALSE)
                        {
                                $str = str_replace(array("\r\n", "\r"), PHP_EOL, $str);
                        }
                }
,搜索了一下这个函数 _clean_input_data
在国外论坛发现一篇文章给出了解决办法
http://codeigniter.com/forums/viewthread/180827/ 6楼
替换成如下
    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);

            }
      }

zhouli520 发表于 2011-3-10 20:18:32

这个问题没记错的话,1.72好像也有

as3291363 发表于 2011-3-11 11:13:55

我也一直在查詢这个问题...
我用的是stblog中的文件皮肤修改 方法都一样...可是就是textarea会多换一行.
不过我用的ci版本是2.0!
问题到现在还没有人看...

http://codeigniter.org.cn/forums/thread-8445-1-1.html

as3291363 发表于 2011-3-11 11:21:29

我用CI2.0也发现了这个问题,很明显这是CI的一个严重bug,CI1.7.2没发现这样的问题。具体现象是,提交texta ...
linkipod 发表于 2011-3-10 16:39 http://codeigniter.org.cn/forums/images/common/back.gif
我替换上你的...一样会有错误...而且还会解析不了一些html...
页: [1] 2
查看完整版本: CI对文本文件操作,多行文本textarea 读和存有问题。