常處理文字資料或程序代碼,常會涉及到在多個文件中對內容進行統一處理的情形。如對批量替換某些文字或按行替換某些內容,或對文檔按內容進行分割、合并等,這些操作單靠常用編輯器來完成,效率不會很高,難點在于多個文件。一款專門用于多文件內容轉換的軟件TextConverter,可以輕松高效地完成各種文件內容批量轉換任務。
1. 構建條件 批量替換文檔內容
如果要批量替換一批文檔中的某些內容,點擊“File→Open Files”命令(或按Ctrl+O組合鍵),打開這些文檔。選擇右側窗格中的Replace Text復選框,點擊其后的Options按鈕,在Search for框中輸入要替換的內容,在Replace by框中輸入要替換為的內容。這時在左側窗格下部的Preview窗口中,會顯示替換前后的內容預覽。點擊Replace按鈕執行替換(圖1)。
如果文檔中需替換的內容不止一處,則可以先構造所有替換條件,再行替換。為此,只需在輸入完一組Search for和Replace by條件后,點擊Add按鈕,將該條件加入復合替換列表。選中Show Settings for mutiple Replacements選項,顯示所有構造的條件。所有替換條件構造完成后,點擊Convert and Save按鈕完成替換并保存文件(圖2)。
替換的文件也可以保存到一個新文件中,以便留存原文件。先通過“View→Saving Options”命令開啟保存選項對話框,然后選擇Save as new File選項,在Floder框中指定保存新文件的文件夾,在Name框中指定文件名稱格式(支持通配符格式和自定義格式),在Format框中指定文件格式類型(支持文本、圖片、網頁、程序代碼和用戶自定義格式)。若不需要保留原文件,選擇Delete Original Files選項,替換后會自動刪除原文件。條件設好之后,點擊Convert and Save替換保存(圖3)。
2. 按行批量替換文檔內容
文檔內容不但可以按關鍵詞實現批量替換,還可以按照行來實現替換。這里的“行”我們可以理解為一個自然段,它可以是一行程序代碼,也可以是文章中的一段文字。如果要將某幾個行的內容替換為同一段內容,選中Line Number選項,然后輸入行號(兩個行號之間用半角逗號分隔),在Replace with框中輸入要替換為的內容(圖4)。按行替換還可以改用行中包含某個文本內容為條件,選擇Text選項即可實現。如果選擇RegEx選項,則可以構造正則表達式,以應對更為復雜多變的需求。
替換的其他設置與上述類似。設好之后,執行替換和保存操作即可。
3. 多行或多段的批量刪除
不但可以實現成批替換,我們還可以用TextConverter一次性刪除多個文本中的多行或多段內容。
要刪除某些文本,在Actions欄內選擇Delete Text,然后在Delete this Text框中輸入要刪除的內容,點擊Add添加更多要刪除的內容,執行刪除操作。如果要按行作為刪除條件進行刪除,則選擇Delete Lines復選框,然后從列表中選擇條件方式,例如按行的范圍刪除、刪除某行之后的行、刪除行中包含某文本的行等(圖5)。條件構造好之后,點擊Convert and Save刪除內容并保存文件。
4. HTML代碼批量處理
編寫網頁時,如果要批量處理HTML代碼,也可以利用上述軟件的批量功能來完成。
在Actions窗格中選擇HTML Actions復選框,然后在列表中就可以通過選擇,完成移除HTML標記、建立Web鏈接、建立E-mail鏈接、刪除無用的制表符、替換各種網頁代碼符號等網頁文件的處理任務(圖6)。
5. 批量連接和分割文件
有時,我們需要將一些分散的文本連接成一個文件,例如小說章回的連接;有時,又可能需要將其分割開來進行處理。要實現此類任務,可利用TextConverter軟件的Join Files和Split Files兩個Action選項來完成。只需在選中了Join Files和Split Files復選框之后,點擊選項后的Options按鈕,構造連接條件或指定分割位置,執行連接或分割操作即可。
6. 在文檔中顯示文件屬性
如果希望在許多文檔中自動顯示其所在文件的某些屬性,例如路徑和文件、擴展名文件日期、文件大小、文件類型等,可在文檔中以一個通用的常量來表示這些值,在用TextConverter軟件轉換時,會自動把這些常量轉換為該文件的對應屬性(圖7)。具體操作時,只需在文檔的適當位置引用如圖所示的常量,在TextConverter中對Constant選項打鉤,執行成批轉換即可。
文分享自華為云社區《【安全攻防】深入淺出實戰系列專題-特殊字符校驗-云社區-華為云》,作者: MDKing。
參考華為Web應用安全開發規范:確保輸入數據只包含允許的字符集,不包含不合法和危險的字符,盡可能采取“白名單”的方式進行輸入校驗。
總體思路是分兩種情況:
延伸:注意,參數校驗只是為了低成本的一次性解決大部分的問題,不能完全強依賴這個環節的校驗,也不能強求這個校驗把所有的有可能出現風險的字符都包含全。比如,上例的remark如果業務上就是需要輸入(、)、=等符號怎么辦?難道就是不允許輸入嗎?也是不合理的。所以對于XSS注入防護的終極方案依然是在渲染前做字符編碼,這樣既能支持多數字符的輸入,又不會有安全問題。所以還是建議特殊字符校驗只選擇最通用危險的少量特殊字符,配合其它的安全防護(比如字符編碼、SQL預編譯等)。
使用指導:在做安全評估時,可將字母、數字、中文以及無安全攻擊場景的字符作為安全最小集,如果不涉及自定義拼接SQL,可以忽略第一列。
特殊字符 | SQL注入攻擊 | XSS | 命令注入 | 文件包含攻擊 | XXE | URL編碼攻擊 | CSV注入 |
, | 需過濾 | ||||||
. | 需過濾 | ||||||
? | |||||||
! | 需過濾 | 需過濾 | |||||
: | |||||||
; | 需過濾 | 需過濾 | 需過濾 | ||||
" | 需過濾 | 需過濾 | 需過濾 | ||||
' | 需過濾 | 需過濾 | 需過濾 | ||||
( | 需過濾 | 需過濾 | 需過濾 | ||||
) | 需過濾 | 需過濾 | 需過濾 | ||||
[ | 需過濾 | ||||||
] | |||||||
{ | |||||||
} | |||||||
< | 需過濾 | 需過濾 | 需過濾 | 需過濾 | |||
> | 需過濾 | 需過濾 | 需過濾 | 需過濾 | |||
- | 需過濾 | 需過濾 | |||||
_ | 需過濾 | ||||||
/ | 需過濾 | 需過濾 | 需過濾 | 需過濾 | 需過濾 | 需過濾 | |
\ | 需過濾 | 需過濾 | 需過濾 | ||||
| | 需過濾 | 需過濾 | |||||
@ | 需過濾 | 需過濾 | |||||
# | |||||||
$ | 需過濾 | ||||||
% | 需過濾 | 需過濾 | |||||
^ | 需過濾 | ||||||
& | 需過濾 | 需過濾 | 需過濾 | ||||
* | 需過濾 | ||||||
+ | 需過濾 | 需過濾 | 需過濾 | ||||
= | 需過濾 | 需過濾 | 需過濾 | ||||
~ | 需過濾 | ||||||
` | 需過濾 | ||||||
空格 | 需過濾 | 需過濾 | |||||
換行 | 需過濾 |
除了漢字是默認全角之外,其它很多字符,比如字母、數字、標點符號都是有半角/全角之分的,大家最常用的是半角,全角不常用。但是如果是涉及到寫黑白名單的正則的時,如果不知道其中的差別,會導致寫錯。
在UE中可以顯示字節長度,我們分別輸入字母、數字、標點符號的半角(占一個字節寬度)、全角(占兩個字節寬度)形式,對比如下:
通過如下驗證,可以發現,^[a-zA-Z0-9,.]+$ 只能只能匹配半角的字符,全角的是沒法匹配的。
想要匹配全角的字母,數字,可以使用^[\uFF21-\uFF3A\uFF41-\uFF5A\uFF10-\uFF19]+$,實際驗證如下:
回車(\r):CR(Carriage Return的縮寫,ASCII碼是13,16進制對應0D),告訴打字機需要“把打印頭定位在行首”
換行(\n):LF(Line Feed的縮寫,Ascii碼是10,16進制對應0A),告訴打字機“把打印紙向下移動一行”
源自于二戰中美國使用的打字機,電子計算機問世后,這兩個概念也同時被引入。因為存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就夠了。從此,計算機界就出現了分歧:
如果不清楚這些概念,很容易導致寫錯正則表達式。我們分別在window、linux系統上創建文件,內容為AB{換行}AB。如下,通過肉眼是看不出區別的:
在UE中按下Ctrl+H可查看二進制,如下可以看到window文件的換行符實際上為0D 0A,即\r\n。
linux文件的換行符只有一個0A,即\n
通過代碼將文件內容讀取后,使用正則表達式做判斷,發現^[AB\nAB]+$只能成功匹配linux下的文件。
通過debug也能看到兩個文件讀取出來的具體內容
關注#華為云開發者聯盟# 點擊下方,第一時間了解華為云新鮮技術~
華為云博客_大數據博客_AI博客_云計算博客_開發者中心-華為云
*請認真填寫需求信息,我們會在24小時內與您取得聯系。