我一直在努力使用UTF-8字符集已经有一段时间了,而且我仍然对某些事情感到困惑。
我有一个网页,允许客户在服务器上创建HTML文件和目录。目录名称可以是任何语言。 Adiós,días,chapter,level 等。创建的目录稍后将用作创建的HTML文件的URL。假设用户创建了一个目录Adiós
,然后创建了一个名为welcome.html
的文件。要查看此文件,客户端单击一个链接,为此我获取目录和文件名以创建路径Adiós/welcome.html
。现在我对这些事感到困惑。
在php中创建目录时,我应该urlencode()
每个文件和目录名吗?
如果我urlencode
目录名称,浏览器是否可以打开我的HTML页面?而不是href="Adiós/welcome.html"
,它将是href="Adi%C3%B3s/welcome.html"
。
我的网页上有时会出现一张图像,我将其作为"Adi%C3%B3s/ing.jpg"
;这会起作用吗?
地址栏中的网址是否应显示非ASCII字符?
我实际上urlencode()
除了第2点和第3点所描述的问题之外,所以我想知道在使用英语以外的语言时,目录命名的正确方法是什么!
答案 0 :(得分:1)
如果在文件系统中保存urlencoded的名称,如果要直接访问它们,则必须对链接和图像源进行双重编码,绕过PHP。或者,您可以保存名称而不使用任何类型的urlencoding,在这种情况下链接需要一次传递。但是,最后一个选项在Windows上不可用,其中文件系统函数不支持Unicode。
或者,如果你仍想绕过PHP,你可以使用重写规则在Apache被urldecoded后重新编码名称。
最后,您应该注意您的方法很危险 - 如果没有安全隐患,很难做到正确。您应该考虑为您的页面提供单个PHP文件并将其保存在数据库中。您仍然可以使用PATH_INFO变量保留漂亮的文件名。如果性能成为此解决方案的问题,您还可以在PHP前面添加缓存层。
答案 1 :(得分:1)
/tülüvkrü.htm
这样的文件,我不知道MS IE如何处理这些事情; 示例:http://tülüvkrü.de/中华人民共和国.htm(应显示“It works!”)
答案 2 :(得分:0)
我有一个网页,允许客户在服务器上创建html文件和文件夹。
这是错误的想法 将他们的文件存储在数据库中并模拟目录结构。
EDIT 因为评论中的这些愚蠢的指责我必须澄清:
满意吗?