【问题标题】:Using Double-Quotation Marks in a URL在 URL 中使用双引号
【发布时间】:2010-08-27 10:03:00
【问题描述】:

除非变量 $row["title"] 包含双引号 ("),否则下面的链接可以正常工作。在这种情况下,链接中引号之后的所有内容都将被省略。

如何使链接包含双引号后的所有内容?

提前致谢,

约翰

echo '<td class="sitename2"><a href="http://www...com/.../comments/index.php?submission='.$row["title"].'">'.$row["countComments"].' COMMENTS</a></td>';

【问题讨论】:

    标签: php html


    【解决方案1】:

    对于可能需要包含任何异常内容的 URL 部分,始终使用 urlencode。...

    echo '<td class="sitename2">'.
      '<a href="http://www...com/.../comments/index.php?submission='.
      urlencode($row["title"]).
      '">'.
      $row["countComments"].' COMMENTS</a></td>';
    

    如果您想了解标准,请参阅RFC3986,其中定义了安全或“未保留”字符,如下所示:

    未保留 = ALPHA / DIGIT / "-" / "." /“_”/“~”

    urlencode 确保您想要包含在 URL 中的值符合这些标准

    【讨论】:

    • FWIW,较新的 RFC 3986 表示只有 -._~ 是特殊的(因此您可能还需要编码 !*'())。
    • 谢谢卡尔,我已经修改了答案以参考较新的 RFC
    【解决方案2】:

    确保对 URL 参数值进行 urlencode。见urlencode

    【讨论】:

      【解决方案3】:

      url 中的参数值必须进行转义才能使 url 有效。

      所以而不是

      $row["title"]
      

      使用

      urlencode($row["title"])
      

      urlencode 会将双引号转换为 %22,这样您就可以避免用错误的双引号结束链接的问题。

      杰罗姆·瓦格纳

      【讨论】:

        【解决方案4】:
        . urlencode($row['title']) . '"> etc
        

        【讨论】:

          【解决方案5】:

          就我而言,urlencode 没有帮助,我使用了urlencode ($var),浏览器中的结果是: localhost/"aaMoldau+-+Aus+dem+Zyklus++"Mein+Vaterland""/

          浏览器说什么:

          遇到错误

          您提交的 URI 包含不允许使用的字符。

          这是我的 MYSQL 条目 ($var):

          aaMoldau - Aus dem Zyklus “我的祖国”

          更新:

          $var开头和结尾的引号是清楚的,因为我插入了它们,但仍然有错误。

          (我不明白为什么urlencode在开头和结尾都创建双引号。)

          此外,'Mein' 之前和 Vaterland 之后的双引号应该删除吗?

          更新 2: 我现在用 str_replace 删除双引号和 urlencode 就可以了。但我以为我不需要 str_replace ?

          此外,我阅读了另一篇堆栈文章,建议将我允许的 uri 字符更改为: $config['permitted_uri_chars'] = '+=\a-z 0-9~%.:_-';

          这里 CodeIgnite 是问题,但现在解决了。奇怪的是 CI 原则上不接受空格中需要的+

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-12
            • 2014-06-14
            • 1970-01-01
            • 2021-09-28
            • 1970-01-01
            • 1970-01-01
            • 2015-09-06
            • 1970-01-01
            相关资源
            最近更新 更多