重定向至“使用ColdFusion的UTF-8 URL”诊断树



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

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

/geschäft/käfer/ 

如果我直接访问地址栏中的URL,就没有问题。但是,如果我更改位置标头以将浏览器重定向到此URL,它最终会显示为:

/gesch%E4ft/k%E4fer/

如果我查看原始页面的响应标题(这是对翻译内容的301重定向),我可以看到以下条目:

Location:/geschäft/käfer/

标题中似乎显示了正确的详细信息,但浏览器的地址栏显示了上面详细描述的带有%E4的编码值。我尝试了各种方法将URL输入到位置标头中,但都得到了相同的结果。

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

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

编辑:这个问题似乎与ColdFusion直接相关。如果我使用Javascript重定向到url,这很有效。。。但需要注意的是,该文件必须与BOM一起保存。如果我使用cflocation,或者如果我使用页面上下文手动插入标题,则无论是否存在BOM,问题都会持续存在。

我还注意到了使用cfinclude时的一个类似问题,即除非调用模板与BOM一起保存,否则这些扩展字符将不正确地显示。

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

<cfprocessingdirective pageencoding = "utf-8"/>

很快,我就看到了与你完全相同的问题。把它包括在任何一页中似乎都很自然。这是非常推测性的,但是当与pageencoding指令一起使用时,CFAS可能在cflocation标记中进行某种URL编码。

假设你在代码中的某个地方有这个,试着删除它进行重定向。如果这样做有效,那么我会把它作为一个bug报告给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/

我已经尝试过上面的方法,但它无法正常工作。我最终"手动"完成了cflocation。像这样:

<cfprocessingdirective pageencoding = "utf-8"/>
<cfheader charset="utf-8" name="location" value="geschäft/käfer/">
<cfheader statuscode="302">

这对我来说很有魅力。

ACF2018仍然打破了这一点-CFHeader的解决方案起到了作用,但。。。是的。。

Lucee(截至5.3.3.62)似乎也存在同样的问题。。我也已经向他们报告了(LDEV-2456),我们将看看他们对此有何看法。

另一个潜在的解决方案是对cflocation将中断的URL部分进行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>

相关内容

  • 没有找到相关文章

最新更新