使用 ColdFusion 重定向到 UTF-8 URL

标签 redirect utf-8 coldfusion header cflocation

我正在开发一个系统,该系统在 URL 的文件夹名称中使用 UTF-8 字符。
导航到这些 URL 没有问题,一切都按预期工作 - 除非重定向到站点上的另一个页面;因此浏览器似乎对扩展字符进行了编码。

举个例子,我试图重定向到以下相对 URL:

/geschäft/käfer/ 

如果我直接在地址栏中访问该 URL,则没有问题。
但是,如果我更改位置 header 以将浏览器重定向到此 URL,它最终会在:
/gesch%E4ft/k%E4fer/

如果我查看原始页面的响应 header (这是对翻译内容的 301 重定向),我可以看到以下条目:
Location:/geschäft/käfer/

似乎正确的细节最终出现在标题中,但浏览器的地址栏显示了带有 的编码值。 %E4 以上详述。
我尝试了各种将 URL 输入到位置 header 中的方法,但都得到了相同的结果。

我在 Chrome 37.0.2062.120 m 和 Firefox 32.0.2 上看到了这种行为。

这是在开发箱上运行的,Windows 7 Home with IIS7.5

编辑:
看来这个问题可能与 ColdFusion 直接相关。如果我使用 Javascript 重定向到 url,这会起作用……但需要注意的是,该文件必须与 BOM 一起保存。
如果我使用 cflocation ,或者如果我使用 pagecontext 手动插入标题,则无论是否存在 BOM,问题仍然存在。

我也注意到使用 cfinclude 的类似问题因为除非调用模板与 BOM 一起保存,否则这些扩展字符显示不正确。

最佳答案

我去测试这个并没有看到相同的结果。但后来我又玩了一点,并尝试使用

<cfprocessingdirective pageencoding = "utf-8"/>

立即,我能够看到与您完全相同的问题。将它包含在任何页面中似乎很自然。这是非常推测性的,但是当与 pageencoding 指令结合使用时,CFAS 可能会在 cflocation 标签中进行某种 URL 编码。

假设您在代码中的某个地方有这个,请尝试将其删除以进行重定向。如果可行,那么我会将其作为错误报告给 Adob​​e。

仅供引用,我是这样做的——带编码的输出
<cfprocessingdirective pageencoding = "utf-8"/>
geschäft/käfer/

我得到了
geschäft/käfer/

但是当我这样做时——使用编码重新定位
<cfprocessingdirective pageencoding = "utf-8"/>
<cflocation url="geschäft/käfer/" addtoken="false" />

它把我安置到
gesch%E4ft/k%E4fer/

当我这样做时 --Output without encoding
geschäft/käfer/
<cfabort>

我有
geschäft/käfer/

但是当我这样做时——没有编码的重定位
<cflocation url="geschäft/käfer/" addtoken="false" />

然后我被搬迁到
geschäft/käfer/

关于使用 ColdFusion 重定向到 UTF-8 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979344/

相关文章:

javascript - 如何将使用 charCodeAt 的 javascript 函数转换为 Coldfusion?

variables - ColdFusion 非作用域与变量作用域 : performance vs. 可读性?

php - UTF-8贯穿始终

apache - 设置自定义处理程序时重定向失败

.htaccess - 为多个域重写为 www 和 https 并不总是有效

apache - 使用 .htaccess 将一个文件夹重定向到另一个文件夹,但保留原始 URL 并阻止对所有其他文件夹的访问

javascript,mysql数据库和转义 'weird'字符

php - UTF-8贯穿始终

mysql - 使用Model建立表之间的内连接

ajax - 跨域ajax不适用于移动Safari中的重定向