2010-07-07 32 views
4

在一個接受,存儲,處理和顯示Unicode文本的應用程序中(出於討論的目的,假設它是一個web應用程序),哪些字符應該總是從傳入文本中刪除?最小文本衛生

我能想到的一些,在C0 and C1 control codes Wikipedia article大多列出:

  1. 範圍0x00 - 0x19(主要是控制字符),不含0x09(製表符),0x0A(LF),和0x0D(CR )

  2. 範圍0x7F - 0x9F(多個控制字符)

可以安全地接受接受的字符的範圍會更好地知道。

還有其他級別的文本過濾 - 一個可能規範化具有多個表示的字符,替換不間斷字符並刪除零寬度字符 - 但我主要關注基礎知識。

回答

1

查看W3 Unicode in XML and other markup languages的注意事項。它將一類字符定義爲「不鼓勵用於標記」,我絕對會過濾掉大多數網站。這主要是包括這樣的字符:

  • U + 2028-9這是時髦的新行,如果你嘗試在一個字符串使用它們將混淆的JavaScript;

  • U + 202A-E是雙向控制代碼,用戶可以插入文本,使文本看起來在某些瀏覽器中反向運行,甚至在給定的HTML元素之外;

  • 語言覆蓋控制代碼,也可能有一個元素範圍外的控制代碼;

  • BOM。

此外,你要篩選/替換無效的Unicode中的所有(U + FFFF等)的字符,如果你使用的是在UTF-16本身的工作語言(例如Java,Windows上的Python),任何不構成有效代理對的替代字符(U + D800-U + DFFF)。

範圍0x00-0x19(主要是控制字符),但不包括0×09(製表符),的0x0A(LF),和0X0D(CR)

,可以說(尤指爲一個Web應用程序),輸CR,並將選項卡變爲空格。

範圍0x7F的-0x9F(更多控制字符)

是的,離開這些,除了在情況下可能會有人真的是他們。 (SO用於允許他們,這使得人們可以發佈錯誤解碼的字符串,這對於診斷Unicode問題偶爾是有用的。)對於大多數網站,我認爲你不需要它們。

0

我想這取決於你的目的。在UTF-8中,如果這是你的奇想,那麼你可以將用戶限制爲鍵盤字符,即9,10,13,[32-126]。如果您使用的是UTF-8,則0x7f +範圍表示您有一個多字節的Unicode字符。在ASCII中,0x7f +包含特殊的顯示/格式字符,並根據位置的語言進行本地化以允許擴展名。

請注意,在UTF-8中,鍵盤字符可能因位置而異,因爲如果用戶的語言不使用沒有口音的拉丁腳本,用戶可以使用其母語輸入字符,這些字符將在0x00-0x7f範圍之外(阿拉伯文,中文,日文,希臘文,希臘文等)。

如果你看看here,你可以看到UTF-8將顯示什麼字符。

+0

謝謝,但我不想限制文本到鍵盤字符,我只是想過濾出可能有意想不到的或危險的結果的字符,比如空字符。 – s4y 2010-07-08 16:10:11