如何解决PHP / CodeIgniter-在奇怪的情况下,$ _ POST数据在提交表单时完全消失
|| 编辑:我认为我已经解决了一些问题。 -这个字符-’
-似乎正在破坏它。如果我使用\'regular \'撇号(it1 it)似乎可以正常工作,如果我将其中的每一个时髦的撇号都替换为常规的撇号,它就很好了。那么,接下来的问题:为什么花哨的撇号会破坏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>
接下来,我具有相应的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\');
}
}
到目前为止一切正常,是吗?这是疯狂问题开始的地方。
我可以“手动”在“内容”字段中输入我喜欢的任何数据。我单击“提交”,所有操作均按预期方式进行-数据库已使用我的新数据进行了更新,这一切都很好。
我可以将Lorem Ipsum的15段或任何内容粘贴并粘贴到字段中。点击提交,万岁。
但是:-我正在尝试从客户的网站(尤其是此页面)复制粘贴内容:http://jeremywebbphotography.com/biog.PHP-我正在更新他的网站,因为自从我的Web开发技能有了很大的提高然后。这是奇怪的地方-复制粘贴后单击“保存”,重新加载表单,出现错误“内容字段为必填项”,复制到该字段的内容消失了。
如果我在网络模式下运行WebKit Inspector并捕获表单提交请求,则可以在$ _POST数组中清楚地看到复制粘贴的文本...
但是,如果我从die(\"Content is \".$_POST[\'content\']);
开始edit_page
功能-它已清除。输出从字面上显示\“内容为\”。就这样。
上面的代码在title
字段中可以正常工作-它仅影响内容。
我发胖了,可能有一些有趣的特殊字符或某些东西导致复制内容中发生这种情况(即使没有)-但是如果您将其粘贴粘贴,则删除所有内容,直到第一个单词“'Biog \' ,然后提交(因此您实际上是在提交一行),同样的事情仍然发生!
WTF正在进行吗?
我确认不是的事情:
我的浏览器(Mac OS X SNow Leopard上的最新Chrome开发工具-在Safari和Firefox中尝试,相同的问题)
CI XSS过滤或安全清理-关闭所有这些,没有运气
CI表单验证。我也将其关闭。
我正在提交的数据(种类)-请参阅最后的描述性要点。
还尝试通过“表单验证”规则(没有雪茄)运行ѭ7no和htmlentities
。
谢谢你的帮助。为了澄清起见,这是我如何将其粘贴粘贴的屏幕截图:
(那里没有什么复杂的,对吗?)-最后,是提交后实际页面输出的快速屏幕截图(对CSS的遗忘,很抱歉,我正在研究中):
解决方法
我建议您使用Text Helper库并使用其
ascii_to_entities
函数:
$this->load->helper(\'text\');
$content = $this->input->post(\'content\');
$content = ascii_to_entities($content);
ascii_to_entities()
:
将ASCII值转换为字符实体,包括高ASCII和MS Word字符,这些字符在网页中使用时可能会引起问题,因此无论浏览器设置如何都可以一致地显示它们或将其可靠地存储在数据库中。取决于服务器支持的字符集,因此它不一定在所有情况下都是100%可靠的,但是在大多数情况下,它应正确识别正常范围之外的字符(例如重音字符)。
, 不确定是否有帮助,但尝试使用$this->input->post(\'postvar\')
代替$_POST[\'postvar\']
。我相信CodeIgniter使用此功能来正确清理和编码帖子数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。