我正在使用在URL的文件夹名称中使用UTF-8字符的系统。 导航到这些网址没有问题,一切都按预期工作 - 除了,当发布重定向到网站上的另一个网页时;因此,浏览器似乎对扩展字符进行编码。
举个例子,我试图重定向到以下相对网址:
/geschäft/käfer/
如果我直接在地址栏中访问该网址,那就没问题了。 但是,如果我更改位置标题以将浏览器重定向到此URL,则结果为:
/gesch%E4ft/k%E4fer/
如果我查看原始页面的响应标题(它是301重定向到翻译内容),我可以看到此条目:
Location:/geschäft/käfer/
似乎正确的细节在标题中结束,但浏览器的地址栏显示上面详述的%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保存调用模板。
答案 0 :(得分:3)
我去测试了这个并没有看到相同的结果。但后来我玩了一点,尝试使用
<cfprocessingdirective pageencoding = "utf-8"/>
我立刻就能看到你遇到的完全相同的问题。将它包含在任何页面中似乎很自然。这是非常推测的,但是当与pageencoding指令一起使用时,CFAS可能在cflocation标记中进行某种URL编码。
假设您的代码中有这个,请尝试将其删除以进行重定向。如果可行,那么我会将此报告为Adobe的错误。
仅供参考,我这样做了 - 输出带编码
<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/
当我这样做时 - 没有编码的输出
geschäft/käfer/
<cfabort>
我得到了
geschäft/käfer/
但是当我这样做时 - 没有编码的重定位
<cflocation url="geschäft/käfer/" addtoken="false" />
然后我被重新安置到
geschäft/käfer/
答案 1 :(得分:2)
我已尝试过上述内容,但无法让它发挥作用。我最终做了cflocation&#34;手动&#34;。像这样:
<cfprocessingdirective pageencoding = "utf-8"/>
<cfheader charset="utf-8" name="location" value="geschäft/käfer/">
<cfheader statuscode="302">
这对我来说就像是一种魅力。
答案 2 :(得分:1)
这在ACF2018上还是无法解决的-CFHeader的变通方法可以解决问题,但是...太糟糕了。
露西(自5.3.3.62起)似乎也有同样的问题。我也已经向他们报告过(LDEV-2456),我们将看到他们对此有何评论。
答案 3 :(得分:1)
另一种可能的解决方法是URL编码cflocation将中断的URL部分。
例如,我有一些条件测试,如果已知参数组合不能很好地协同工作,它将进行301重定向。这些参数之一由希腊字符组成。我们的解决方案是在需要的地方使用URLEncodedFormat()。
<cfif Translation EQ "LXX" AND (URL.ot EQ "MGNT" OR URL.ot EQ "TR")>
<cfset URL.word = URLEncodedFormat(URL.word)>
<cflocation statuscode="301" url="/lang/lexicon/inflections.cfm?strongs=G#myStr.StrongsNum#&t=#URL.ot#&ot=#URL.ot#&word=#URL.word#" addtoken="No" />
</cfif>