PHP/CodeIgniter - $ _POST数据在奇怪的情况下完全消失在表单提交上

Jac*_*ack 5 php post codeigniter

编辑:我想我已经解决了一些问题.- 这个角色 - 似乎打破了它.如果我使用'常规'撇号(')它似乎工作正常,如果我用常规撇号替换其中的每个时髦撇号,它提交就好了.那么,下一个问题:为什么那个花哨的撇号打破了CodeIgniter或PHP?我会认为这是一个CI错误,但如果我错了,请纠正我.无论如何,这是我最初发布的问题,我仍然会理解为什么会发生这种情况以及我能做些什么呢?


我把头发撕成了这个.这完全是奇怪的,我根本无法解决这个问题.

首先,我有一个基本形式:

<?php $attributes = array('class' => 'form1'); $selected="";
echo form_open('admin/edit_page/'.$page->row('id'), $attributes); ?>

    <div>               
        <?php echo form_error('title'); ?>
        <label>Page Title:</label><input type="text" maxlength="100" name="title" value="<?php echo $page->row('title');?>" />
    </div>

    <div class="textarea">
        <?php echo form_error('content'); ?>
        <label>Page Content:</label><textarea name="content"><?php echo $page->row('content');?></textarea>
    </div>

    <div class="no">
        <input type="submit" value="Submit"/>
    </div>

</form>
Run Code Online (Sandbox Code Playgroud)

接下来,我有相应的CI功能:

function edit_page($id)
{
    $this->form_validation->set_rules('title', 'Title', 'trim|required|max_length[50]');
    $this->form_validation->set_rules('content', 'Content', 'trim|required');

    // If validation has failed...
    if ($this->form_validation->run() == FALSE)
    {
        $data['page'] = $this->gallery_model->get_page($id);

        $this->load->view('admin/header');
        $this->load->view('admin/editpage', $data);
        $this->load->view('admin/footer');
    }
    else    // Validation successful
    {
        $title = $this->input->post('title');
        $content = $this->input->post('content');
        $this->gallery_model->edit_page($id, $title, $content);
        redirect('admin');
    }

}
Run Code Online (Sandbox Code Playgroud)

一切都好,到目前为止,是吗?这是疯狂问题开始的地方.

  • 我可以"手动"在"内容"字段中输入我喜欢的任何数据.我点击提交,一切都按预期工作 - 数据库用我的新数据更新,一切都很好.
  • 我可以复制并粘贴15段Lorem Ipsum或其他任何东西就好了.点击提交,万岁.
  • 但是: - 我正在尝试从客户端的网站复制粘贴内容,特别是这个页面:http://jeremywebbphotography.com/biog.php - 我正在更新他的网站,因为我的网络开发技能从那时起已经有了很大的改进.事情变得奇怪 - 在复制粘贴后点击保存,表单重新加载,我收到错误"内容字段是必需的",我的复制粘贴到字段中消失.
  • 如果我在网络模式下运行WebKit Inspector并捕获表单提交请求,我可以在$ _POST数组中清楚地看到我的复制粘贴文本...
  • 但是,如果我开始edit_page使用它die("Content is ".$_POST['content']);- 它已经清除了它自己.输出字面上写着"内容是".就这样.
  • 以上工作与该title字段的预期一致- 它只影响内容.
  • 我知道可能会有一些有趣的特殊字符或某些东西导致复制内容中发生这种情况(即使没有) - 但是如果你复制粘贴它,那么删除所有内容直到第一个单词'Biog',然后提交(所以你真的提交一行),同样的事情仍然发生!.

WTF正在进行中?!

我确认的事情不是:

  • 我的浏览器(Mac OS X Snow Leopard上的最新Chrome Dev - 在Safari和Firefox中尝试过,同样的问题)
  • CI XSS过滤或安全消毒 - 将这些全部关闭,没有运气
  • CI表格验证.我也把它关掉了.
  • 我提交的数据(种类) - 请参阅最终描述要点.
  • 还尝试运行htmlspecialcharshtmlentities通过表格验证规则,没有雪茄.

谢谢你的帮助.为了澄清,这里是我如何复制粘贴它的屏幕截图:

我是如何复制粘贴的

(那里没有什么复杂的,对吧?) - 最后,提交后的实际页面输出的快速截图(抱歉CSS好了,我正在研究它):

看起来如何

ste*_*nja 1

我建议你使用Text Helper库并使用它的ascii_to_entities功能:

$this->load->helper('text');
$content = $this->input->post('content');
$content = ascii_to_entities($content);
Run Code Online (Sandbox Code Playgroud)


ascii_to_entities():

将 ASCII 值转换为字符实体,包括在网页中使用时可能导致问题的高位 ASCII 和 MS Word 字符,以便无论浏览器设置如何,它们都可以一致显示或可靠地存储在数据库中。这对服务器支持的字符集有一定的依赖性,因此在所有情况下它可能不是 100% 可靠,但在大多数情况下它应该正确识别正常范围之外的字符(例如重音字符)。