【问题标题】:Strange non English characters in String, error on server字符串中出现奇怪的非英文字符,服务器出错
【发布时间】:2016-11-30 23:23:45
【问题描述】:

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

这是我的工作流程:

  1. 从用户屏幕上的TextView 获取文本,运行此代码以删除不需要的字符:

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";
    }
    ?>
    

文件名包含这些奇怪的字符,我认为是由于用户屏幕上的非英文字符。

我需要小心,因为上传文件到我的服务器的路径是基于这个文件名的,我不知道如何用非英文字符测试它。任何帮助深表感谢。我需要在不弄乱文件路径的情况下删除/替换任何非英文字符。

【问题讨论】:

  • 这是因为您从设备发送的字符未编码。请使用 UTF-8 对其进行编码,并在服务器端进行解码。
  • 你能帮忙看看怎么做吗?
  • 我推荐你关注这个tutorial
  • 看起来不错,我会试试的。谢谢。
  • 这很好用,谢谢,但我留下的文件名包含 %2F:name=%2Fstorage%2Femulated%2F0%2FDownload%2FServerError%2F105。如何在写入文件名之前删除这些并保留空格?请看我上面的PHP...谢谢,请帮忙。

标签: php android server


【解决方案1】:

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

【讨论】:

  • 你的观点很好,但不幸的是我没有这方面的经验,也不知道该怎么做。文本文件名是在我的代码中生成的(基于应用程序创建的文本字段),用户永远不会看到它;它包含我可以使用的错误数据,但我明白你的观点这是多么不安全。感谢您的回复...
  • $file_path = $file_path 。 bin2hex(basename($_FILES['uploaded_file']['name']));
  • 这似乎有效,但我无法复制正在生成的奇怪字符(没有你的修复),甚至从我的应用程序中添加其他语言。知道如何测试吗?
【解决方案2】:

使用此行对您有帮助。

String styledText = 你的文件名;

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

【讨论】:

  • fromHtml 被贬低
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 2012-08-15
  • 2011-01-16
  • 2021-04-23
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多