【问题标题】:how to prevent the url to be transformed?如何防止url被转换?
【发布时间】:2011-04-24 10:35:51
【问题描述】:

我有一个url,url中的参数是人类有意义的。但是转换后的网址包含很多字符,如“%5B%5D”,我应该如何防止网址被转换。

【问题讨论】:

  • 您在什么平台/语言上工作?
  • 编程语言为php
  • 我知道你在说什么,在参数上和希伯来语是一样的。我也想要一个解决方案...

标签: php url rewrite


【解决方案1】:

%NN 是在 url 中表示非 ascii 字符的唯一正确方法。

你无法阻止它。如果客户不能(或不想)以“正确”的方式呈现它们 - 他们将被 %'ed。

【讨论】:

    【解决方案2】:

    示例标题:

    $title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
    

    有效的 URL 编码:

    $title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
    $title = urlencode($title) ;
    // Result: Ex%C3%A4mpl%C3%A9+str%C3%AEng+%C3%ACncl%C3%BCding+sp%C3%A9ci%C3%A2l+ch%C3%A0r%C3%A3ct%C3%AArs+and+%28s%C3%B6me%29+%5Bbrackets%5D.
    

    urlencode() 函数对每个非 ascii 字符进行编码。
    URL 必须以这种方式编码才能正常工作。
    幸运的是,您可以通过以下方式使其易于阅读:
    (删除非 ascii 字符/用下划线替换空格)

    $title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
    $title = iconv('UTF-8', 'US-ASCII//TRANSLIT', $title); 
    $title = preg_replace('/[^A-Za-z0-9 ]/', '', $title ); 
    $title = str_replace(' ','_',$title); 
    // Result: Example_string_including_special_characters_and_some_brackets
    

    总之,创建如下 URL:

    "http://www.site.com/blog.php?Article=Example_string_including_special_characters_and_some_brackets"
    

    代替:

    "http://www.site.com/blog.php?Article=Ex%C3%A4mpl%C3%A9+str%C3%AEng+%C3%ACncl%C3%BCding+sp%C3%A9ci%C3%A2l+ch%C3%A0r%C3%A3ct%C3%AArs+and+%28s%C3%B6me%29+%5Bbrackets%5D."
    

    【讨论】:

    【解决方案3】:

    实际上,它确实与渲染引擎有关,您无法摆脱它。对于像壁虎这样的东西,尽管被转换了,但它可以以人类可读的形式显示。

    【讨论】:

      【解决方案4】:

      您是在谈论何时显示 URL,还是将其用作 href 值?

      如果你想让它显示得很好,你可以通过urldecode() 运行它。根据其他答案,在 href 值内,它必须看起来像这样,否则 URL 可能会在某些浏览器和服务器中中断,所以让它看起来像这样是个好主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        • 2011-03-03
        • 2021-12-03
        • 2021-06-14
        • 1970-01-01
        相关资源
        最近更新 更多