【问题标题】:Escaping single quotes in a URL link在 URL 链接中转义单引号
【发布时间】:2016-04-13 13:45:38
【问题描述】:

我有一个发送的链接抛出一些 PHP 代码:

echo "<a href='" . $galerry . "#" . apastro(get_title($primid)) . "'     class='linkorange'>voir sa galerie</a>";

$galerry 链接到另一个页面。

get_title($primid)$galerry 页面中特定元素的id。

并且该机制可以正常工作,直到其中一个元素 id 包含单引号。这是有道理的,因为它会中断回声功能。

这就是我有 apastro 功能的原因:

function apastro($phrase){
    $phrase1 = str_replace("'", "\'", $phrase);
    return $phrase1;
}

然而,单引号前的\ 没有帮助......

假设链接重定向到页面something.php 上id="l'aro" 的元素。那么 URL 将是something.php#l\

【问题讨论】:

标签: php html


【解决方案1】:

它会中断回显功能

不会的。它会破坏由' 字符分隔的字符串文字,但您的字符串文字由" 字符分隔。在这种情况下,它破坏了 ' 字符分隔的 HTML 属性值。

\ 不是 URL 或 HTML 的转义字符。

使用 urlencode 使字符串可以安全地放入 URL。

使用htmlspecialchars 使字符串可以安全地放入 HTML 属性中。

$title = get_title($primid);
$urlsafe_title = urlencode($title);
$url = $galerry . "#" . $urlsafe_title;
$htmlsafe_url = htmlspecialchars($url, ENT_QUOTES | ENT_HTML5);

echo "<a href='$htmlsafe_url' class='linkorange'>voir sa galerie</a>";

【讨论】:

  • 这是您将得到的最佳答案。我一直用这个。
【解决方案2】:

如果您想转义仅单引号,请使用双反斜杠,如下所示

$str = str_replace("'", "\\'", $str);

【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2016-10-02
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多