使用 PHP GET 清理字符串以在 href 中使用

Posted

技术标签:

【中文标题】使用 PHP GET 清理字符串以在 href 中使用【英文标题】:sanitize string for use in href with PHP GET 【发布时间】:2013-02-06 03:04:30 【问题描述】:

我正在尝试将用户定义的字符串添加到通过 href 传递给第三方的信息中。所以我有一些看起来像的东西

<a href="http://thirdparty.com/?data_set=USERSTRING" target="_blank">Link Text</a>

USERSTRING 在页面加载时是已知的,因此可以在页面加载时通过 php 将其放入 href 中,或者我可以使用 javascript 动态添加它。

我不知道我需要做什么来转义任何特殊字符,以便链接正常工作并且可以在另一端读取 - USERSTRING 可能真的很烦人,例如:[他说,“90% '不够好?"] 数据仅用于自动生成的文件名,因此不需要 100% 保留,但我试图避免无端丑陋。

【问题讨论】:

【参考方案1】:

urlencode() 函数提供了您正在寻找的内容,即:

<a href="http://thirdparty.com/?data_set=<?php echo urlencode('USERSTRING'); ?>" target="_blank">Link Text</a>

【讨论】:

【参考方案2】:

你需要urlencode它。如果您最终使用的 urlencode 变体没有按照应有的方式对 '&'、'#'、'"' 和尖括号进行编码,那么您也需要对其进行 html 编码。

【讨论】:

我相信,如果传递给单个 GET 参数的值包含您提到的特殊字符之一,它将由 urlencode() 进行适当编码。如果这些字符出现在 URL 的其他位置,它们应该通过 htmlentities() 进行编码。当有多个通过 & 分隔的 GET arg 或 URL 在 # 之后的末尾包含目标锚时,可能会发生这种情况 @nathan,同意。我提到它只是因为声称可以完成相同工作的特定于框架的功能可能更加松懈。例如,htmlentities 对引号进行编码,因此可用于属性值内容,但并非所有看似等效的函数都这样做。

以上是关于使用 PHP GET 清理字符串以在 href 中使用的主要内容,如果未能解决你的问题,请参考以下文章

PHP 清理用户输入数据(GET,POST,COOKIE)

php 格式化字符串以在URL中使用

PHP 清理和抓取POST / GET / Referer变量功能

清理未关闭的 ZipFile 以在 excel 文件中存档

PHP清理变量

PHP输入GET vars sanitizing