РЕДАКТИРОВАТЬ: Я думаю, что я что-то решил. - Этот персонаж - ’
- кажется, ломает это. Если я использую «обычный» апостроф ('
), он, кажется, работает нормально, если я заменяю каждый шикарный апостроф в нем обычным, он подает просто отлично. Итак, следующий вопрос: , почему этот причудливый апостроф нарушает 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');
}
}
Пока все в порядке, да? Вот где начинается безумная проблема.
- Я могу «вручную» ввести любые данные, которые мне нравятся, в поле «Содержимое». Я нажимаю Отправить, все работает как положено - база данных обновлена моими новыми данными, все хорошо в мире.
- Я могу скопировать и вставить 15 абзацев Lorem Ipsum или что угодно в поле просто отлично. Хит отправить, ура.
- Однако: - Я пытаюсь скопировать и вставить контент с сайта клиента, в частности, с этой страницы: http://jeremywebbphotography.com/biog.php - Я обновляю его сайт, так как мои навыки веб-разработчика значительно улучшились с того времени. Вот где дела идут странно - после нажатия кнопки сохранения после вставки копии форма перезагружается, я получаю сообщение об ошибке «Поле содержимого обязательно» , и моя копия-вставка в поле исчезает.
- Если я запускаю WebKit Inspector в сетевом режиме и записываю запрос на отправку формы, я ясно вижу свой вставленный при копировании текст в массиве $ _POST ...
- Однако, если я начну свою
edit_page
функцию с die("Content is ".$_POST['content']);
- , ЭТО ОЧИСТИЛСЯ . Вывод буквально говорит «Контент есть». Вот и все.
- Вышеуказанное работает, как и ожидалось, с полем
title
- оно влияет только на контент.
- Я понял, что могут быть какие-то забавные специальные символы или что-то, вызывающее это в скопированном содержимом (даже если это не так) - но если вы скопируете и вставите его, то удалите все вплоть до первое слово 'Biog', затем отправьте (так что вы буквально отправляете одну строку), то же самое происходит! .
WTF продолжается?!
Вещи, которые я подтвердил, это не так:
- Мой браузер (последняя версия Chrome Dev для Mac OS X Snow Leopard - пробовал в Safari и Firefox, та же проблема)
- CI XSS Filtering или Security Sanitizing - отключили все это, не повезло
- Проверка формы CI. Я тоже его выключил.
- Данные, которые я отправляю (вид) - см. Окончательный описательный пункт.
- Также попытался запустить
htmlspecialchars
и htmlentities
по правилам проверки формы, без сигар.
Спасибо за вашу помощь. Чтобы уточнить, вот скриншот того, как я копирую его:
(Там нет ничего сложного, верно?) - и, наконец, быстрый скриншот фактического вывода страницы после отправки (извините за CSS-шансы, я работаю над этим):