2010-08-25 55 views
0

我正在和perl一起工作。我有數據保存在數據庫中作爲 “如何避免格式錯誤的URI序列錯誤?

我想轉義這些字符,以避免在客戶端有錯誤的URI序列錯誤。這個錯誤似乎只發生在火狐上。我在Google上搜索時發現的修復不是使用decodeURI,但我需要使用它才能正確顯示其他字符。

任何幫助? uri_escape在服務器端似乎不夠。

在此先感謝。


Detalils: 在Perl中我做了以下內容:

print "<div style='display:none;' id='summary_".$note_count."_note'>".uri_escape($summary)."</div>"; 

,並在Java腳本邊我想從這個div讀取並將其放在另一個地方,因爲這:

getObj('summary_div').innerHTML= unescape(decodeURI(note_obj.innerHTML)); 

其中note_obj是將摘要保存在perl上的隱藏div。 當我刪除decodeURI時,問題就解決了,我在java腳本上沒有得到格式錯誤的URI序列錯誤。然而我需要爲其他角色使用decodeURI。

這個問題似乎在firefox和IE7上重現。

+3

爲什麼uri_escape似乎不夠?顯示你的嘗試。 :) – 2010-08-25 15:48:39

+0

我添加了關於這個問題的細節。 – Luci 2010-08-26 07:06:20

+0

你的意思是你的數據庫包含不正確的UTF-8?或者你的意思是你的數據庫包含UTF-8,這是正確的,但是當你用Latin-1工具看它時,它看起來像?你可以顯示你在那裏的實際字節,特別是如果你不確定這是什麼意思? – tripleee 2012-12-18 04:56:24

回答

0

,你可以嘗試使用CGI模塊,並進行

$uri = CGI::escape($uri);

也許這取決於上下文的你試圖逃跑的URI。
這在CGI上下文中適用於我。

當你添加了細節,我可以建議:


<div style='display:none;' id='summary_".$note_count."_note'>".CGI::escape($summary)."</div>"; 
+0

我承認我不太瞭解你的問題:你需要編碼還是解碼uri? – benzebuth 2010-08-25 15:49:52

0

網址轉義不會幫助你在這裏 - 這是轉義的URL,在HTML不轉義文本。你真正想要的是在你輸出字符串時對它進行編碼。請參閱Encode.pm內置庫。確保你在HTTP頭文件中正確使用了charset語句:「Content-Type:text/html; charset = UTF-8」或類似的東西。

如果你不走運,你可能還需要對字符串解碼出數據庫。這取決於數據庫驅動程序和編碼...