用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6753|回复: 13
收起左侧

[已解决] CI对文本文件操作,多行文本textarea 读和存有问题。

  [复制链接]
发表于 2011-3-4 21:26:42 | 显示全部楼层 |阅读模式
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);
发表于 2011-3-4 22:13:40 | 显示全部楼层
到底想做什么?没太看明白。
 楼主| 发表于 2011-3-5 09:26:37 | 显示全部楼层
对robots.txt操作
1:不存在robots.txt就自动生成
2:robots.txt在多行文本textarea 读出,能修改和保存。
但保存的robots.txt用记事本打开会有多余的空格,但网页上打开没问题。
发表于 2011-3-5 22:21:59 | 显示全部楼层
这个你需要用 var_dump 来分析下,跟 CI 没什么关系。
 楼主| 发表于 2011-3-6 19:15:01 | 显示全部楼层
var_dump($output) ;

都没有见到换行的。
======>
ing(60) "User-agent: * Allow: / Sitemap: http://127.0.0.1/sitemap.xml"
发表于 2011-3-6 21:28:42 | 显示全部楼层
那保存也不会出现空格。
除非 PHP 保存文件函数有问题,不过这个可能性是0% 呵呵
发表于 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行

  1.                 if ($this->_standardize_newlines == TRUE)
  2.                 {
  3.                         if (strpos($str, "\r") !== FALSE)
  4.                         {
  5.                                 $str = str_replace(array("\r\n", "\r"), PHP_EOL, $str);
  6.                         }
  7.                 }
复制代码
,搜索了一下这个函数 _clean_input_data
在国外论坛发现一篇文章给出了解决办法
http://codeigniter.com/forums/viewthread/180827/ 6楼
替换成如下

  1.     if ($this->_standardize_newlines == TRUE)
  2.         {
  3.             if (strpos($str, "\r") !== FALSE)
  4.             {
  5.                 //$str = str_replace(array( "\r\n", "\r"), PHP_EOL, $str);
  6.                 $str = preg_replace('/(?:\r\n|[\r\n])/', PHP_EOL, $str);

  7.             }
  8.         }
复制代码

评分

参与人数 1威望 +2 收起 理由
Hex + 2 我很赞同

查看全部评分

发表于 2011-3-10 20:18:32 | 显示全部楼层
这个问题没记错的话,1.72好像也有
发表于 2011-3-11 11:13:55 | 显示全部楼层
我也一直在查詢这个问题...
我用的是stblog中的文件皮肤修改 方法都一样...可是就是textarea会多换一行.
不过我用的ci版本是2.0!
问题到现在还没有人看...

http://codeigniter.org.cn/forums/thread-8445-1-1.html
发表于 2011-3-11 11:21:29 | 显示全部楼层
我用CI2.0也发现了这个问题,很明显这是CI的一个严重bug,CI1.7.2没发现这样的问题。具体现象是,提交texta ...
linkipod 发表于 2011-3-10 16:39

我替换上你的...一样会有错误...而且还会解析不了一些html...

本版积分规则