2016-07-27 48 views
2

首先,我的代碼正在工作......但是結果文件導致我的服務器出現問題。只有具有奇怪字符的文件在服務器上導致錯誤,例如文件不存在或嘗試通過FTP打開文件時連接到文件的錯誤。所有沒有奇怪字符的文件在服務器上工作正常,可以打開和編輯。字符串中的奇怪非英文字符,服務器上的錯誤

這是我的工作流程:

  1. TextView獲取用戶的屏幕上的文本,通過這個代碼,運行它來刪除不想要的字符:

replaceAll("[^a-z ,()A-Z0-9]+", "-");

  • 使用此文本作爲文件名創建一個文本文件;
  • 上傳這個文本文件中的服務器與此PHP腳本:

    <?php 
    
    $file_path = "uploads/"; 
    
    $file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { 
    echo "success"; 
    } else{ 
    echo "fail"; 
    } 
    ?> 
    
  • 的文件名含有這些奇怪的字符,我認爲由於用戶的屏幕上非英文字符。

    enter image description here

    我必須要小心,因爲路徑文件上傳到我的服務器是基於這個文件的名字,我不知道如何用非英文字符進行測試。任何幫助深表感謝。我需要刪除/替換任何非英文字符而不會搞亂文件路徑。

    +0

    這是因爲您從設備發送的字符沒有編碼。請使用UTF-8對其進行編碼,並在服務器端對其進行解碼。 – LvN

    +0

    你可以請幫忙怎麼做? –

    +1

    我建議你按照這個[教程](http://androidexample.com/How_To_Make_HTTP_POST_Request_To_Server_-_Android_Example/index.php?view=article_discription&aid=64&aaid=89) – LvN

    回答

    0

    使用此行它的幫助你。

    String styledText = Your File Name;

    textView.setText(Html.fromHtml(styledText));

    +0

    'fromHtml'被取消 –

    0

    從技術上講,您可以通過使用mb_convert_encoding將服務器上的字符串轉換爲UTF-8來解決此問題,但是您的代碼實際上並不安全,因爲您正在使用傳遞的用戶變量作爲文件路徑,並且黑客可以發送/ .. /../../等等。
    我使用的解決方案是使用bin2hex將服務器上傳遞的文件名轉換爲十六進制字符串。這樣你有一個非常安全的文件名,沒有編碼問題。

    +0

    您有一個很好的觀點,但不幸的是,我沒有這方面的經驗,也不知道如何做到這一點。文本文件名是在我的代碼中生成的(基於應用程序創建的文本字段),用戶從不會看到它;它包含我可以使用的錯誤數據,但我明白你的觀點,這可能是不安全的。感謝您的回覆... –

    +1

    $ file_path = $ file_path。 bin2hex(basename($ _FILES ['uploaded_file'] ['name'])); – lionscribe

    +0

    這似乎是工作,但我不能重複生成的奇怪字符(沒有你的修復),甚至從我的應用程序添加其他語言。任何想法如何測試? –