2011-06-18 18 views
5

編輯:我想我已經做了一些事情。 - 這個字符 - - 似乎在破壞它。如果我使用「常規」撇號('),它似乎工作正常,如果我將它的每個時髦撇號替換爲常規撇號,它會提交得很好。所以,下一個問題:爲什麼做那個奇特的撇號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'); 
    } 

} 

一切OK,到目前爲止,是嗎?這是瘋狂問題開始的地方。

  • 我可以'手動'輸入任何我喜歡的數據到內容區域。我點擊提交,所有工作都按預期進行 - 數據庫用我的新數據進行更新,在全世界都很好。
  • 我可以複製並粘貼Lorem Ipsum或其他任何15段到場就好了。點擊提交,hooray。
  • 但是: - 我試圖從客戶端的網站上覆制粘貼內容,特別是這個頁面:http://jeremywebbphotography.com/biog.php - 我正在更新他的網站,因爲我的網頁開發技能已經有了很大提高。 這裏是奇怪的事情 - 在複製粘貼後,打上保存,表格重新加載,我得到錯誤「內容字段是必需的」,我的複製粘貼到字段中消失。
  • 如果我運行網絡模式的WebKit督察,並捕獲表單提交請求時,我可以清楚地看到$ _POST陣列在我的複製粘貼文本...
  • 但是,如果我開始edit_page功能與die("Content is ".$_POST['content']); - 它已清除其自身。輸出字面意思是「內容是」。就這樣。
  • 上述工作與title字段預期的一樣 - 僅影響內容。
  • 我發現可能有一些有趣的特殊字符或導致這種情況發生在複製的內容中(即使沒有) - 但是如果您複製粘貼它,然後刪除的一切直到第一個單詞' Biog',然後提交(所以你實際上提交一行),仍然發生同樣的事情!

WTF正在繼續?!

事我已經證實了它是不是:

  • 我的瀏覽器(最新的Chrome瀏覽器開發上的Mac OS X雪豹 - 嘗試在Safari和Firefox,同樣的問題)
  • CI XSS過濾或安全消毒 - 將這些全部關閉,沒有運氣
  • CI表單驗證。我也關閉了它。
  • 我提交的數據(種類) - 請參閱最終描述性要點。
  • 也試過運行htmlspecialcharshtmlentities通過表單驗證規則,沒有雪茄。

感謝您的幫助。爲了澄清,這裏的我是如何的複製粘貼它的截圖:

How I'm copy-pasting

- 最後,提交後的實際頁面輸出的快速截圖(約對不起(此時沒有複雜的,對吧?) CSS的書呆子們,我的工作就可以了):

如果

How it looks

+0

'post_max_size'和'suhosin.post.max_value_length'(如果安裝了suhosin)是什麼值? – netcoder

+0

大約10秒前剛剛更新了我的問題 - 我想我已經弄清楚它是什麼。 Suhosin沒有安裝(現在只是MAMP),不要認爲'post_max_size'是相關的,雖然我提交了更多的Lipsum數據(15段)。 – Jack

+0

表單頁面使用的字符集是什麼? – netcoder

回答

1

我建議你使用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文字在網頁中使用時會導致問題,因此無論瀏覽器設置或存儲的r如何都可以一致顯示在一個數據庫中。對服務器支持的字符集有一定的依賴性,因此它在所有情況下可能不是100%可靠,但大多數情況下它應該正確識別正常範圍以外的字符(如重音字符)。

2

不知道這將有助於在所有,但使用$this->input->post('postvar')代替$_POST['postvar']嘗試。我相信CodeIgniter使用這個函數來正確清理和編碼後期數據。

相關問題