我在本地Windows开发环境中使用jquery UI选项卡。我正在测试他们的demo code
<div id="tabs">
<ul>
<li><a href="#tabs-1">Nunc tincidunt</a></li>
<li><a href="#tabs-2">Proin dolor</a></li>
<li><a href="#tabs-3">Aenean lacinia</a></li>
</ul>
<div id="tabs-1">
<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. </p>
</div>
<div id="tabs-2">
<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie</p>
</div>
<div id="tabs-3">
<p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede ve</p>
</div>
</div>
问题是我在这个函数上遇到了“未捕获的URIError:URI格式错误”:
function isLocal( anchor ) {
return anchor.hash.length > 1 &&
decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
Uncaught URIError: URI malformed
decodeURIComponent( location.href.replace( rhash, "" ) );
}
我怀疑这是由于Windows环境中的URI看起来像这样:
file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1
我如何让它在本地Windows上运行,因为我的客户希望在上线之前看到它在那里工作?我已经测试过,我知道这是由uri上特殊字符的编码引起的(比如“acções”这个词)。 有没有办法让它即使使用特殊字符?
我知道我可以通过删除这些字符并重命名文件/文件夹来解决这个问题,但是我希望有一个更加客户端证明的解决方案,以防他们决定再次重命名文件夹(而且一切都变成了CABOOM在他们的脸上。)
答案 0 :(得分:14)
这是decodeURIComponent方法的结果,该方法假定给定字符串的百分比编码字节为UTF-8(参见第15.1.3节中Decode operation的步骤4.d.vii.8) ECMAScript中)。你的示例字符串:
"file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1"
包含百分比解码字节0xE7 0xF5,它们不能在有效的UTF-8字符串中一个接一个地出现(它们代表Windows-1252中的两个字符çõ
)。因此,decodeURIComponent会抛出URIError异常。
解决此问题的一种方法(我尚未测试)是确保使用UTF-8字符编码提供网页,而不是ISO-8859-1
,我认为这是默认设置。
为此,请按以下方式添加META标记:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
(虽然理想的是包含一个包含字符集的Content-Type标头,但在涉及文件系统的本地测试中通常不可能这样做。)
并确保网页本身以UTF-8编码。
此外,您的示例字符串在您的网页上显示在哪里?它是如何产生的?您在哪个浏览器上测试了该行为?答案将帮助我告诉你该怎么做。
答案 1 :(得分:6)
这是jquery中的错误 - http://bugs.jqueryui.com/ticket/9518 - 适用于非UTF8网址。我有同样的问题并解决了它。因为我无法将页面的编码更改为UTF-8,所以我最终修补了我的jqueryui并使用了Rainer Plumer的解决方案作为解决方法,但我不得不使用它两次因为我有一些URI参数包含编码的URI。所以我的解决方案是
decodeURIComponent( unescape( unescape(s)) )
更一般地说,应该有重复 - 直到循环,不进行转换,直到你得到相同的结果。这种解决方法肯定不是一个干净的解决方案。这里要求提供干净的解决方案:
Submit form with get method in non UTF-8 encoding
PS:整个jquery UI补丁:
function isLocal( anchor ) {
return anchor.hash.length > 1 &&
decodeURIComponent( unescape( unescape( anchor.href.replace( rhash, "" ) ) ) ) ===
decodeURIComponent( unescape( unescape( location.href.replace( rhash, "" ) ) ) );
}
答案 2 :(得分:4)
这样的东西?
s = "file:///C:/Work/my%20project/yadda%20ac%E7%F5es%20yadda/submenu.html#tabs-1";
decodeURIComponent( unescape(s) )
答案 3 :(得分:3)
我遇到了相同的错误“未捕获的URIError:URI格式错误”,并且通过执行以下操作对其进行了修复:
varname
注意:将页面的编码更改为UTF-8或添加unescape()对我不起作用。
答案 4 :(得分:0)
我自己有这个问题。我无法找到清理源字符串的方法,因此我只是绕过了异常,因此数据将继续加载。 希望这会有所帮助。
try {
myVal = decodeURIComponent(sourceVal);
} catch (err) {
myVal = "";
}
答案 5 :(得分:-1)
我将演示代码剪切并粘贴到保存在文件夹路径中的记事本中,文件夹名称(新文件夹)中有一个空格作为test1.html。然后我双击test1.html它就像一个梦想。
你显然改变了一些东西,它改变了什么,它会恢复正常。