【问题标题】:What does "&key" means in PHP?PHP中的“&key”是什么意思?
【发布时间】:2010-01-28 17:54:10
【问题描述】:

我有一个非常奇怪的问题。我正在使用 PHP,在我的 PHP 代码中,我编写了电子邮件内容并生成了这个链接:

....
<a href="http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey . '">http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey . '</a>
....

大多数时候,它工作正常。然后,我收到很多投诉说他们无法激活。在检查了他们的电子邮件后,我发现了这个:

<a href="http://www.domain.com/act.php?id=20090=hsdf87hsf89sd">http://www.domain.com/act.php?id=20090=hsdf87hsf89sd'</a>

缺少“&键”。为什么?很奇怪的bug!!!

完整的 PHP 命令:

$content = '<div style="font-family:Calibri; color:#333;">
    Hi there, <br><br>

    Thank you for register to our website, click the following link to activate your account:<br><br>

<a href="http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey . '">http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey . '</a><br><br>

XXX Team</div>';

Gumbo 可能是对的,我的电子邮件内容是基于 HTML 的:

$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

【问题讨论】:

  • 我认为您有引用问题。您可以发布导致该字符串的完整 PHP 命令吗?
  • 编辑您的问题,并发布您如何生成链接
  • +1 欢迎来到 StackOverflow,@PHPNoob1001。
  • @Pekka:我检查了我的报价,看起来不错。奇怪的是,为什么大部分时间都很好。太奇怪了@Pentium10:我编辑了我的问题,请再看看@Jon:谢谢。我喜欢这个网站。响应速度非常快。太棒了!!!

标签: php keyword


【解决方案1】:

您需要使用character reference&amp;amp; 字符进行编码,例如&amp;amp;

'<a href="http://www.domain.com/act.php?id=' . $userid . '&amp;key=' . $actkey . '">http://www.domain.com/act.php?id=' . $userid . '&amp;key=' . $actkey . '</a>'

或者更好:

'<a href="' . htmlspecialchars('http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey) . '">' . htmlspecialchars('http://www.domain.com/act.php?id=' . $userid . '&key=' . $actkey) . '</a>'

【讨论】:

  • 但这不可能是他的问题,不是吗? &amp;amp; 应该出现在他的源代码中,不是吗?
  • & 是一个查询字符串分隔符 - url 编码它会得到错误的效果.. 他正在尝试page.php?id=5&amp;key=7&amp;someother=52 - 文字和符号是正确的
  • @Erik:不,我们在 HTML 上下文中。那里的&amp;amp; 需要用字符引用来表示。
  • 实际上我以为我疯了,但它是双向的:http://pixel.dyndns.info/tests/test.php - 我从来没有意识到你可以逃脱&amp;amp;,但它也可以在没有它的情况下逃脱,这就是它的原因不是他的问题。
  • @Erik:它可能适用于 key。但它是无效的,可能不适用于其他名称。
【解决方案2】:

&amp;key 用作字符串,例如。 echo '&amp;key';,并不意味着什么特别 - 它只是一个普通的字符串。你能粘贴你的整个代码吗?

问题可能是&amp; 字符是 HTML 中的特殊字符。

【讨论】:

    【解决方案3】:

    把钥匙放在第一位:

    <a href="http://www.domain.com/act.php?key=' . $actkey . '&id=' . $userid . '">http://www.domain.com/act.php?key=' . $actkey . '&id=' . $userid . '</a>
    

    【讨论】:

      【解决方案4】:

      Gumbo 正确地将 &amp; 编码为 &在 HTML 文档中。 你可以让 PHP 的 http_build_query() 做所有必要的编码来构建一个有效的查询字符串。

      /* testdata: */ $userid=12; $actkey='abc&def';
      $params = http_build_query(array(
        'id'=>$userid,
        'key'=>$actkey
      ), '', '&amp;');
      $url = 'http://www.domain.com/act.php?'.$params;
      echo $url;
      

      打印http://www.domain.com/act.php?id=12&amp;amp;key=abc%26def

      【讨论】:

      • 感谢您的回答。非常感谢=)
      猜你喜欢
      • 2021-02-09
      • 2013-03-09
      • 2018-11-16
      • 2010-10-29
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多