2010-09-22 84 views
1

我們正在做一個AJAX調用來從數據庫中檢索。由於我們的客戶可能使用不同的語言,因此我們將所有內容編碼爲Unicode以存儲在數據庫中(不必擔心排序問題等)。現在,當我們獲取要顯示在輸入文本字段中的內容時,它將顯示Unicode代碼。檢查HTML 4 documentation for input和值是一個CDATA它告訴我這些unicode應顯示爲他們的字符。
從附加的屏幕截圖可以看出情況並非如此,我想知道是否有辦法「強制」這種行爲。在輸入字段強制顯示來自Unicode的文本

alt text

+0

強制使用有效字符的最佳方式是使用適當的編碼 - UTF8。這是2010年,你知道的。 – naivists 2010-09-22 16:48:43

+0

我的歉意,那不是ASCII碼,這是unicode。是的,我知道這是2010年,我們生活在地球,謝謝。 – Purefan 2010-09-22 19:50:31

+1

你把「Unicode」和「HTML實體」搞混了。 – BalusC 2010-09-24 00:31:21

回答

1

由於我們的客戶端可以使用不同的語言,我們都編碼成ASCII到數據庫存儲(保存擔心排序規則和這樣)。

恕我直言,將html實體存儲到數據庫中是一種非常糟糕的做法。我強烈建議你在任何地方都使用UTF-8編碼。這可以讓你免於擔心排序等問題。

+0

我的歉意,那不是ASCII碼,這是unicode。 – Purefan 2010-09-22 19:50:03

1

您正在傳遞一個完整的&#...;數字字符引用的JavaScript字符串。 JavaScript字符串不是HTML編碼的,因此您的代碼確實會生成包含&符號,哈希等的JS字符串。

當您將其設置爲輸入的DOM值(val())時,自然那些&號將仍然存在。 DOM屬性是純字符串,而不是標記。如果您打算將其標記用於與innerHTML/html()一起使用,則只需在JavaScript中對HTML進行編碼。

因此,PHP不應該HTML編碼不會插入到HTML中的內容。使用json_encode()創建JavaScript字符串文字:

$('#js_global_status_input').val(<?php echo json_encode($status_value); ?>); 
+0

非常感謝您的時間和建議,但是,由於它沒有對我的工作進行到底,這裏是Ajax響應:$( 「#js_status_input」)VAL( 「מ ה ב ר א ש ש ל ך?」)。那是使用json_encode – Purefan 2010-09-28 11:47:02

+0

你還在傳遞&符號和哈希值。不要那樣做,除了標記之外,它們沒有任何意義。 'val()'不是標記,你需要傳遞一個正常的,未編碼的字符串:'val('מהבראששלך')',或者,如果在JSON字符串中轉義爲ASCII碼安全('json_encode'將會執行默認),'val(「\ u05de \ u05d4 \ u05d1 \ u05e8 \ u05d0 \ u05e9 \ u05e9 \ u05dc \ u05da」)'。您需要讓您的服務器端腳本停止對正在分發的值進行HTML編碼。 – bobince 2010-09-28 12:29:11

+0

如果你實際上在你的數據庫內容中有'מ ה ...',那麼你遇到了很大的問題。雖然你可以通過在PHP中調用'html_entity_decode($ s,ENT_QUOTES,'utf8')'來解決這個問題,但是在你的數據庫中使用HTML編碼的文本肯定表明你的應用程序正在做一些非常錯誤的事情,編碼所有輸入,而不是在輸出階段進行編碼。數據庫內容應始終以原始文本形式保存。 – bobince 2010-09-28 12:32:13