【问题标题】:If the last character is a "/", remove it如果最后一个字符是“/”,则将其删除
【发布时间】:2013-03-10 12:45:57
【问题描述】:

我正在从头开始制作一个搜索引擎(哈哈),我一直在解决这个问题:

当用户提交 URL 时,我的“蜘蛛”会“抓取”它以获取其他链接。 有些人当然使用<a href="/page"> 而不是<a href="http://long-domain.com/page">,所以我用 if(substr($link->getAttribute('href'), 0, 1) == '/')

并在其前面添加一个域。但是,每当我添加一个域时,一些链接就会变成http://php.net//abcd。如您所见,它的//

现在,我的想法是让我的脚本编辑提交的 URL,所以如果它最后有一个斜杠,它将被删除,但我不知道如何删除它。

【问题讨论】:

  • 相对 URL 比仅以斜线开头要复杂得多。事实上,许多相对 URL 根本不以斜杠开头 - 并且仍然不包含域名。
  • ... 然后您可能在有效的相对 URL (/www.domain.com/pages) 中有域名;和协议相关的 URL //domain.com/page
  • 我没遇到过这些问题,我做个小检测。谢谢。
  • @user2153768 http://google.com/directory 上的链接可能会显示为 index.html,这意味着结果应该是:http://google.com/directory/index.html。它可能是/index.html,这意味着它应该是:http://google.com/index.html,或者它可能是./index.html../index.html 或任何数量的其他组合。这种方法根本不可能奏效。
  • 这对你来说可能很有趣:stackoverflow.com/questions/4444475/…

标签: php url dom substr


【解决方案1】:

您可以使用rtrim

$url = rtrim($url, '/');

它将删除字符串末尾的所有/,如果没有则保持不变

【讨论】:

  • 除了现在,这会对不以斜杠开头的相对 URL 产生额外的问题。你最终得到http://domain.comdirectory/file
  • 这就是如何删除最后一个/的问题的答案。关于相对url,他应该只检查url是否以http开头,如果是,那么它是绝对url
  • @MarkoD 检查一个 URL 是否有一个方案只是告诉你它是相对的还是绝对的。它根本没有告诉你如何解决它。另外,是的-您确实回答了这个问题。但是在这样做的过程中,您创建了确切的 相反 问题(现在,他将在许多 URL 上以 no 斜杠结束,而不是 URL 上的双斜杠)
  • @ColinMorelli Nabab 给了他一个很好的链接如何解决这个问题,我刚刚回答了他最初的问题,虽然我理解你的意思:-)
  • @MarkoD 我知道 - 而且我没有对你投反对票。只是解释为什么我首先发表评论。
【解决方案2】:

只需对最终网址进行字符串替换

<?php $final_url=str_replace("//","/",$your_link_to_be_crawled); ?>

这很简单。

在它影响 http:// 后把 // 放回去,

preg_replace

<?php
$your_url_to_crawl;
$patterns = array(); $patterns[0] = '/http:/';$patterns[1] = '/https:/'; $patterns[2] = '/any_other_protocol/';
$replacements = array(); $replacements[2] = 'http://'; $replacements[1] = 'https://';$replacements[0] = 'any_other_protocol';
echo preg_replace($patterns, $replacements, $your_url_to_crawl);

?>

【讨论】:

  • OMG..dnt 认为 abt...hmmmmmmm
  • 第一次去掉斜线怎么样,当然http://会受到影响然后你把它放回去..看看我的新答案
  • 我想过,但我会尝试更有效的方法。
  • 我刚刚对我的代码进行了一些编辑,并且能够以某种方式修复它。
  • 请发布您的答案,因为这可以帮助其他人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2022-11-29
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多