[英]PHP upload text file encoding check and manipulation
我有一個標准文件上傳,用戶應該在其中上傳文本文件。 但是“文本文件”並不等同於“文本文件”。 同一文件可以具有不同的編碼:UTF8,UTF7,UTF16,UTF32,ASCII和ANSI
更清楚地說,我注意到某些編碼不能顯示所有字符,而另一種編碼可以顯示。
樹題:
女巫編碼是“最具競爭性”的編碼,您可以在其中轉換任何編碼而不會丟失內容
檢查文件是否為文本文件而不是二進制文件
檢查文本文件的內容是否為base64編碼?
如果上傳的編碼不是“最競爭”的編碼,則將“即時”編碼更改為“最競爭”的編碼(請參閱問題1)
我不想在這里發送整個代碼,所以讓我們承認我有表單和action =“ upload.php”,現在是我需要檢查以上內容的部分。
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
[...]
// this ist the check after the upload
if(isset($_POST["submit"])) {
// check 1 : what encoding has been uploaded ?
// check 2 : is the file a text file and not a binary?
// check 3 : in the content of the file a base64 encoded text?
}
// if the encoding is different to the "most preferred" change the encoding to the "most preferred"
[...]
你能幫忙嗎?
女巫編碼是“最具競爭性”的編碼,您可以在其中轉換任何編碼而不會丟失內容
Unicode。 選擇Unicode標准的任何常見編碼,例如UTF-8或UTF-16。 互聯網上的事實上的標准是UTF-8。
檢查文件是否為文本文件而不是二進制文件
沒有這樣的區別。 文本文件也只包含二進制數據,恰好發生這種情況,即以正確的編碼解釋的二進制數據會導致人類可讀的文本。
您可以嘗試檢查文件是否包含很多“控制字符”或NUL
字節等,那么它可能不是文本。
您可以嘗試確認文件在任何預期的編碼中是否有效 。 手頭有支持/預期的編碼列表,並對照該列表進行檢查。 請注意,盡管任何隨機二進制垃圾在任何單字節編碼(例如ISO-8859-1)中都是“有效的” ...
檢查文本文件的內容是否為base64編碼?
嘗試將其解碼為Base64。 如果解碼正確,則可能是 Base64編碼的。 如果由於字符錯誤/格式錯誤而無法解碼,則可能不是。 但是,這很容易產生誤報,因為簡單的短文本序列可能看起來像Base64編碼的文本。
如果上傳的編碼不是“最競爭”的編碼,則將“即時”編碼更改為“最競爭”的編碼(請參閱問題1)
如果不是UTF-8編碼,將其轉換為UTF-8 ... 從原來的編碼...
您如何知道其原始編碼? 你不知道 你可以猜得出來 。 同樣,請准備好一系列編碼,並使用最有可能的編碼逐一檢查。
對您來說這聽起來不是很理智嗎? 好吧,那是因為事實並非如此。
嘗試處理未知的編碼是一場噩夢,您最好避免完全這樣做。
沒有正確的答案。 會有誤報。 您無法確定是否需要人工確認結果。 如果您的文本文件使用未知的編碼,請嘗試以所有已知的編碼對其進行解釋,排除無法正確解碼的文本,然后讓人們選擇最佳的結果。 有些庫實現了這種猜測/檢測邏輯,可能與統計文本分析結合使用,以猜測解碼文本為實際文本的可能性,但是請注意,所有此類庫從根本上只能為您提供最佳猜測 。
或者知道編碼是從什么開始的。 從元數據中,或通過人工告訴您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.