簡體   English   中英

PHP上傳文本文件編碼檢查與操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM