Perl CGI上传编码

时间:2016-05-26 11:30:55

标签: perl utf-8 cgi

当我在cgi脚本中输入编码为utf8的字符串时,它转换为下划线

示例1: 我上传了一个文件"تجربة.jpeg"
我找到了名为"__________.jpeg"

的文件

示例2:我上传了一个文件"1(1).jpeg"
我找到了名为"1_1_.jpeg"

的文件

我认为有两种可能性:

  1. 有一个函数可以对PHP中使用的特殊字符进行编码:basename
  2. 缺少接受UTF8文件名编码的功能
  3. 那你觉得怎么样?

2 个答案:

答案 0 :(得分:0)

问题是一个正则表达形式,将所有字符转换为a-z,A-Z,0-9为“_”

正则表达式:s/[^a-zA-Z0-9-_\.]/_/gs

我刚刚添加了一系列我需要的字符,所以最终结果是:

正则表达式:s/[^a-z؀-A-Z0-9-_\.]/_/gs

我添加的范围是:U + 0600 TO U + 1EEFx
这是阿拉伯语字符范围

参考: https://en.wikipedia.org/wiki/Arabic_script_in_Unicode

感谢@Dave-Cross

答案 1 :(得分:0)

匹配alpha,不带UTF8:

/a-zA-Z/

匹配alpha,UTF-8和Latin1中的重音字符:

/[:alpha:]/

无需为下一位开发人员进一步复杂化。