EDYCJA: Myślę, że coś wymyśliłem. - Ta postać - ’
- wydaje się ją łamać. Jeśli używam "zwykłego" apostrofu ('
), wygląda na to, że działa dobrze, jeśli zastąpię każdy spięty apostrof w nim zwykłym, to przesyła go w porządku. Tak, następne pytanie: dlaczego czy ten fantazyjny apostrof łamie CodeIgniter lub PHP? Zakładam, że to błąd CI, ale popraw mnie, jeśli się mylę. Tak czy inaczej, oto pytanie, opublikowany pierwotnie, chciałbym jeszcze docenić pewien wgląd dlaczego tak się dzieje i czy jest tam dużo mogę zrobić:
mam łzawienie włosy się nad tym. Jest to całkowicie dziwne i po prostu nie mogę tego rozwiązać.
Po pierwsze, mam podstawową formę:
<?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>
Dalej, mam odpowiedni Funkcja 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');
}
}
Wszystko OK tak daleko, tak? Oto, gdzie zaczyna się szalony problem.
- mogę „ręcznie” wpisz wszelkie dane Lubię w polu zawartości. Klikam Prześlij, wszystkie prace zgodnie z oczekiwaniami - baza danych jest aktualizowana o moje nowe dane, wszystko jest dobre na świecie.
- Potrafię skopiować i wkleić 15 akapitów Lorem Ipsum lub cokolwiek innego w polu. Hit, hooray.
- Jednak: - Próbuję skopiować i wkleić zawartość ze strony klienta, szczególnie ta strona: http://jeremywebbphotography.com/biog.php - Aktualizuję jego witrynę, ponieważ moje umiejętności programistyczne znacznie się poprawiły. Oto, gdzie rzeczy idą dziwnie - po naciśnięciu save after copy-pasting to, formularz przeładowuje, pojawia się błąd "Pole zawartości jest wymagane", a moja kopia-wklej do pola znika.
- Jeśli biegnę WebKit inspektor na trybie sieciowym i uchwycić żądanie przesłania formularza, mogę wyraźnie zobaczyć mój egzemplarz wklejony tekst w tablicy $ _POST ...
- Jeśli jednak zacznę mój
edit_page
funkcję zdie("Content is ".$_POST['content']);
- IT USUNIĘTO SIEBIE. Dane wyjściowe mówią dosłownie "Content is". To wszystko. - Powyższe działa zgodnie z oczekiwaniami w polu
title
- wpływa tylko na treść. - Rozumiem, że mogą istnieć jakieś zabawne znaki specjalne lub coś, co powoduje to w kopiowanej zawartości (nawet jeśli nie ma) - ale jeśli ją skopiujesz i wkleisz, usuń najpierw wszystko aż do pierwszego słowa " Biog ", następnie prześlij (więc dosłownie przesyłasz jedną linię), to samo dzieje się nadal!.
WTF trwa ?!
Czego potwierdziły to nie jest:
- Moja przeglądarka (najnowszy Chrome Dev Mac OS X Snow Leopard - próbował w Safari i Firefox, ten sam problem)
- CI XSS filtrowania lub bezpieczeństwa Dezynfekcja - wszystko to zniknęło, bez powodzenia
- Zatwierdzenie formularza CI. Wyłączyłem to również.
- Dane, które przesyłam (rodzaj) - patrz końcowy punkt opisowy.
- Próbowano również uruchamiać
htmlspecialchars
ihtmlentities
poprzez zasady sprawdzania poprawności formularzy, bez cygara.
Dzięki za pomoc. Aby wyjaśnić, oto zrzut ekranu jak jestem skopiowanie i wklejenie go:
- i wreszcie, szybki zrzut rzeczywistego wyjścia stronę po złożeniu (sorry about (Nic na terenie hotelu, prawda?) z wonks CSS, pracuję na nim):
Jaka jest wartość "post_max_size" i "suhosin.post.max_value_length" (jeśli zainstalowano suhosin)? – netcoder
Właśnie zaktualizowałem moje pytanie około 10 sekund temu - myślę, że udało mi się ustalić, co to jest. Suhosin nie jest zainstalowany (na razie jest to MAMP), nie myśl, że "post_max_size" jest istotny, ponieważ przesłałem znacznie więcej danych (15 pasów) Lipsum. – Jack
Jakiego zestawu znaków używa strona formularza? – netcoder