Gar*_*ton 6 coldfusion redirect header utf-8 cflocation
我正在开发一个在URL的文件夹名称中使用UTF-8字符的系统.导航到这些URL没有问题,一切都按预期工作 - 除非在网站上发布重定向到另一个页面; 因此浏览器似乎编码扩展字符.
举个例子,我试图重定向到以下相对URL:
/geschäft/käfer/
Run Code Online (Sandbox Code Playgroud)
如果我直接在地址栏中访问该URL,则没有问题.但是,如果我更改位置标题以将浏览器重定向到此URL,则最终会:
/gesch%E4ft/k%E4fer/
Run Code Online (Sandbox Code Playgroud)
如果我查看原始页面的响应标题(它是301重定向到翻译的内容),我可以看到这个条目:
Location:/geschäft/käfer/
Run Code Online (Sandbox Code Playgroud)
似乎正确的细节在标题中结束,但浏览器的地址栏显示上面详述的%E4的编码值.我尝试了各种方法将URL输入到位置标题中,但所有方法都得到了相同的结果.
我在Chrome 37.0.2062.120 m和Firefox 32.0.2上看到了这种行为.
这是在一个开发盒上运行,Windows 7 Home with IIS7.5
编辑:
似乎这个问题可能与ColdFusion直接相关.如果我使用Javascript重定向到网址,这可行......但需要注意的是文件必须与BOM一起保存.如果我使用cflocation,或者如果我使用pagecontext手动插入标题,则无论是否存在BOM,问题都会持续存在.
我还注意到使用的类似问题,cfinclude除非使用BOM保存调用模板,否则这些扩展字符显示不正确.
我去测试了一下,没有看到相同的结果。但后来我又玩了一下并尝试使用
\n\n<cfprocessingdirective pageencoding = "utf-8"/>\nRun Code Online (Sandbox Code Playgroud)\n\n我立刻就看到了与您完全相同的问题。将其包含在任何页面中似乎很自然。这是非常推测的,但当与 pageencoding 指令结合使用时,CFAS 可能会在 cflocation 标记中进行某种 URL 编码。
\n\n假设您的代码中某处有此内容,请尝试将其删除以进行重定向。如果可行,我会将此作为错误报告给 Adobe。
\n\n仅供参考,我这样做了——带编码的输出
\n\n<cfprocessingdirective pageencoding = "utf-8"/>\ngesch\xc3\xa4ft/k\xc3\xa4fer/\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了
\n\ngesch\xc3\xa4ft/k\xc3\xa4fer/\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我这样做时——使用编码重新定位
\n\n<cfprocessingdirective pageencoding = "utf-8"/>\n<cflocation url="gesch\xc3\xa4ft/k\xc3\xa4fer/" addtoken="false" />\nRun Code Online (Sandbox Code Playgroud)\n\n它把我重新安置到
\n\ngesch%E4ft/k%E4fer/\nRun Code Online (Sandbox Code Playgroud)\n\n当我这样做时——没有编码的输出
\n\ngesch\xc3\xa4ft/k\xc3\xa4fer/\n<cfabort>\nRun Code Online (Sandbox Code Playgroud)\n\n我有
\n\ngesch\xc3\x83\xc2\xa4ft/k\xc3\x83\xc2\xa4fer/\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我这样做时——不编码重定位
\n\n<cflocation url="gesch\xc3\xa4ft/k\xc3\xa4fer/" addtoken="false" />\nRun Code Online (Sandbox Code Playgroud)\n\n然后我被搬迁到
\n\ngesch\xc3\xa4ft/k\xc3\xa4fer/\nRun Code Online (Sandbox Code Playgroud)\n