字符串中有奇怪的非英文字符,服务器上有错误

时间:2016-07-27 05:48:35

标签: php android server

首先,我的代码正在运行......但结果文件导致我的服务器出现问题。只有具有奇怪字符的文件才会导致服务器上出现错误,例如文件不存在或尝试通过FTP打开文件时连接到文件时出错。所有没有奇怪字符的文件在服务器上运行正常,可以打开和编辑。

这是我的工作流程:

  1. 从用户屏幕上的TextView获取文字,通过此代码运行以删除不需要的字符:
  2. replaceAll("[^a-z ,()A-Z0-9]+", "-");

    1. 使用此文本作为文件名创建文本文件;
    2. 使用此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";
      }
      ?>
      
    3. 文件名包含这些奇怪的字符,我假设由于用户屏幕上的非英文字符。

      enter image description here

      我需要小心,因为将文件上传到我的服务器的路径是基于此文件名,我不知道如何使用非英文字符进行测试。任何帮助深表感谢。我需要删除/替换任何非英文字符,而不会弄乱文件路径。

2 个答案:

答案 0 :(得分:0)

请使用此行帮助您。

String styledText =您的文件名;

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

答案 1 :(得分:0)

从技术上讲,您可以通过使用mb_convert_encoding将服务器上的字符串转换为UTF-8来解决此问题,但实际上您的代码非常不安全,因为您使用传递的用户变量作为文件路径,并且黑客可以发送/../ ../../等等。
我用于两者的解决方案是使用bin2hex将服务器上传递的文件名转换为十六进制字符串。这样你就有了一个非常安全的文件名,没有编码问题。