在URL

2010-08-27 23 views
2

下面的链接工作正常,除非该变量$row["title"]包含双引号(“)使用双引号。在这种情况下,引号后,一切都在链路省略。在URL

如何我可以使链接包括双引号之后的一切吗?提前

感谢,

约翰

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

回答

7

始终使用urlencode为如果你想进入的标准,可能需要包含什么不寻常....

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

一个URL的一部分,是指RFC3986它定义了安全,或'无保留'的字符如下:

unreserved = ALPHA/DIGIT /“ - ”/“。” /“_” /“〜”

进行urlencode可以确保您要在URL中包括一个值按这些标准

+0

+1对于标准:) – srinivas 2010-08-27 10:15:44

+1

FWIW,较新的[RFC 3986](http://www.ietf.org/rfc/rfc3986.txt)说只有'-._〜'是特殊的(所以你可以还需要编码'!*'()')。 – 2014-11-19 00:21:12

+0

谢谢卡尔,我已经修改了答案以引用更新的RFC – 2014-11-19 12:18:46

5

确保您urlencod e你的URL参数值。看到urlencode

2
. urlencode($row['title']) . '"> etc 
2

的网址中的参数值必须按顺序逃过该网址是有效的。

所以不是

$row["title"] 

使用

urlencode($row["title"]) 

进行urlencode将改变双引号为%22所以你会避免错误的双引号结束您的链接的问题。

杰罗姆·瓦格纳

1

在我的情况下,进行urlencode没有帮助,我用urlencode ($var),结果在浏览器中: 本地主机/ “aaMoldau ++澳元+ DEM + Zyklus ++” 我的+ Vaterland “”/

什么浏览器说:

一个错误时遇到

您提交已禁用的字符的URI。

这里是我的MySQL入门($ VAR):

aaMoldau - 澳大利亚DEM Zyklus “我的Vaterland”

更新:

在开始和$ VAR结束时的报价是明确,因为我插入了它们,但仍然存在错误。

(我不明白为什么在用urlencode开始和最终产生双引号)。

此外,前“拜见”和Vaterland后的双引号应该被删除?

更新2: 我现在使用 str_replace与urlencode一起删除双引号,这很好。但我认为我不需要str_replace?

此外,我读了另一个帖子,建议将我允许的uri字符更改为: $ config ['permitted_uri_chars'] ='+ = \ a-z 0-9〜%。:_-';

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