【问题标题】:Regex returned unexpected result after matching正则表达式匹配后返回意外结果
【发布时间】:2016-01-22 10:32:18
【问题描述】:

我正在使用正则表达式来匹配链接,但结果缺少重要部分。匹配后,它会错过“amp;”由于某种原因在链接中。为什么会发生这种情况,我该如何解决?

$link = "/w/index.php?title=Category:English_verbs&pagefrom=AFFAMISH%0Aaffamish#mw-pages";
$regex = "~^/.+~";

preg_match($regex, $link, $match);

print_r($match);

结果:

Array ( [0] => /w/index.php?title=Category:English_verbs&pagefrom=AFFAMISH%0Aaffamish#mw-pages )

^---这个结果缺少verbs&pagefrom之间的amp;

预期结果:

Array ( [0] => /w/index.php?title=Category:English_verbs&pagefrom=AFFAMISH%0Aaffamish#mw-pages )

【问题讨论】:

  • 您可能会在解码 html 实体的浏览器上看到输出。这是您正常运行的代码 ideone.com/h7xhhr 。您可以随时使用 php 函数 html_entity_decode()htmlentities() 分别解码或编码 html 实体。
  • 查看源代码,而不是浏览器中呈现的输出。或添加明文标题<?php header("Content-Type:text/plain");

标签: php regex hyperlink preg-match


【解决方案1】:

It's not。您可能只是在浏览器中查看输出,如果发送 text/htmlContent-type 标头,浏览器会将其处理为 HTML(因此 & 变为 &)。

尝试在 CLI 中查看它以避免此问题,或者如果您坚持在浏览器中查看它,请使用 header('Content-type: text/plain')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多