Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么URI编码(';';)锚导致404,以及如何在JS中处理它?_Javascript_Hash_Webkit_Hashtag - Fatal编程技术网

Javascript 为什么URI编码(';';)锚导致404,以及如何在JS中处理它?

Javascript 为什么URI编码(';';)锚导致404,以及如何在JS中处理它?,javascript,hash,webkit,hashtag,Javascript,Hash,Webkit,Hashtag,使用hashtag,但如果它们被编码(到%23),大多数浏览器将出现404错误。这: 由于#回调部分不是URL的一部分,因此会出现404错误。 它是浏览器使用的书签,并且从未发送进去 将请求发送到服务器。如果对哈希进行编码,它将成为 而不是文件名 为什么散列仅仅因为是URI编码的就成为文件的一部分?这不是一只虫子吗 我这样问是因为使用了hashtags,并且也有同样的问题。我认为在散列之前添加一个“?”是最优雅的解决方案,我只是有点不知道如何在现有代码中这样做: function getHash

使用hashtag,但如果它们被编码(到%23),大多数浏览器将出现404错误。这:

由于#回调部分不是URL的一部分,因此会出现404错误。 它是浏览器使用的书签,并且从未发送进去 将请求发送到服务器。如果对哈希进行编码,它将成为 而不是文件名

  • 为什么散列仅仅因为是URI编码的就成为文件的一部分?这不是一只虫子吗

  • 我这样问是因为使用了hashtags,并且也有同样的问题。我认为在散列之前添加一个“?”是最优雅的解决方案,我只是有点不知道如何在现有代码中这样做:

    function getHashtag(){ url=location.href; hashtag=url.indexOf('#gallery')!==-1)?decodeURI(url.substring(url.indexOf('#gallery')+1,url.length)):false; return hashtag; } function setHashtag(){ if(typeof theRel=='undefined')return; location.hash=theRel+'/'+rel_index+'/'; } function clearHashtag(){ if(location.href.indexOf('#gallery')!==-1)location.hash=""; } 他们成功地处理了%23导致问题的情况

  • 为什么散列仅仅因为是URI编码的就成为文件的一部分?这不是一只虫子吗
  • 如果您将浏览器指向
    http://example.com/index.html#title
    ,浏览器对此进行解释,从服务器
    example.com
    请求文件
    index.html
    。请求完成后,浏览器将在文档中查找名为“title”(即1998年的
    )的锚元素。请参阅。引用:

    字符“#”被排除在外,因为它用于从URI引用中的片段标识符分隔URI(第4节)

    至于2和3,您的示例代码中没有足够的上下文来说明您正在尝试执行的操作。您如何调用您的代码?您试图对无法正常工作的PrettyTo执行什么操作?您是否尝试从用户单击或其他javascript事件重定向到特定的照片或图库?当有人看到您时,您是否尝试打开图库这是一个特殊的页面

    我用twitter/oauth检查了这个链接问题,但我不知道这与您提供的代码有什么关系。我也开始戳prettypto,但我也不知道您的代码与此有什么关系

    与更改404页面不同,您可能需要的是一个代码内处理程序或服务器重写规则,该规则接收包含
    %23
    的未找到请求,并将用户重定向到已解码的url。这可能有一些缺点,但如果您接收来自无法控制的其他来源的传入请求,则会非常优雅。什么是您的服务器环境吗?(语言、服务器技术、机器所有者等)

    我很乐意为您更新我的答案,为您提供解决方案或解决方案。

    回答#1)

    它将成为URL的一部分,因为它不再是浏览器/服务器/etc知道如何解析的令牌

    我的意思是“?”在URL中扮演着重要的角色——服务器知道如何区分之前和之后。 浏览器不需要关心URI中哪些是动态的,哪些不是动态的——这都很重要(尽管JavaScript将location对象中的值分隔开)

    浏览器不会向服务器发送“#……”,因为标签对浏览器有特殊含义

    但是,如果在JavaScript中转义该散列,浏览器会毫不犹豫地将转义字符串作为文本值发送到服务器

    为什么不呢?如果您的搜索查询合法地需要一个散列字符(您向facebook墙发出POST请求,并且您提交了一个电话号码),那么您就完蛋了。 或者你在411.com或其他网站上进行基于GET的数字搜索,而他们并没有认真考虑他们的应用程序

    问题是,如果转义值发生在实际路径中,服务器不会理解转义值将与url分开保存

    它必须接受转义字符,否则空格(%20)和其他每日字符(在文件名/路径/查询/值中有效)将造成问题

    因此,如果您正在寻找:

    //mysite.gov.on.ca/path/to/file.extension%23action%3Dfullscreen
    
    的确,你一定会的

    我敢肯定,你可以做一些事情。 第一个可能是在Apache中,或者无论您从何处提供服务,您都可以编写一个正则表达式,该正则表达式匹配到第一个“%23”的任何url,前提是事先没有“?”

    不那么让人心碎的实现可能需要弄清楚是否有办法避开插件友好的“#”

    例如,谷歌使用了一种“散列爆炸”策略(“#!”),它要求URL以这种方式提交,以了解是否需要编码

    其他选项可能是使用
    url.indexOf(“#”)检查“#”字符
    并在哈希处拆分URL,然后提交有效部分


    实际上,这一切都取决于你想要完成什么——我可以指出为什么这是一个问题,但如何最好地让它成为一个非问题取决于你想做什么,你想怎么做,以及在你工作的环境中允许做什么。

    合并?在上面的代码中,您似乎可以修改“url”变量,该变量已定义为读取url=location.href+“?”还请注意,SO问号“hash”明确表示哈希算法。URL/HTML功能更好地分类在“锚”下。谢谢大家!我的问题最初是由最终用户使用编码版本的链接并获得404引起的。我甚至不知道它是如何编码的,可能是通过Gmail和Earthlink电子邮件程序进行的旅行。出于这个原因,我想知道“?”方法是否不好,因为它也可能被编码。至于RFC 2396,我想知道为什么浏览器在发送URL之前不解码%23?正如您所说,链接可能在用户看到它之前就被编码了。浏览器不会对链接进行解码,因为他们无法知道编写链接的人的意图。如果我真的给一篇新闻文章命名为“谁吃了最后一块饼干?”,你可以通过
    http://example.com/Who+ate+last+cookie%3F
    ,如果您的浏览器解码了它,它会解释解码的内容吗?作为查询字符串的开始,您可以
    //mysite.gov.on.ca/path/to/file.extension%23action%3Dfullscreen