当前位置: 首页 > 知识库问答 >
问题:

在OOP筛选器方法中接受http、https和www

齐航
2023-03-14

下面的方法使链接可点击。这是一个过滤器。您发送文本字符串,它将超文本传输协议和https转换为可点击的链接。

/**
* Make clickable links from URLs in text.
*
*/
public function make_clickable($text) {

  return preg_replace_callback(
    '#\b(?<![href|src]=[\'"])https?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#',
  create_function(
    '$matches',
    'return "<a href=\'{$matches[0]}\'>{$matches[0]}</a>";'
  ),$text);

}

我想扩展这个方法来接受www(比如www.google.com),这可能吗?

提前感谢。

使现代化

下面的字符串查找超文本传输协议,https和www,但与www类型的链接有错误的href。例如,它链接到webroot/www.test.com。

'/((http[s]?:|www[.])[^\s]*)/'

解决方案

/**
* Make clickable links from URLs in text.
*/
public function make_clickable($text) {

  // Force http to www.
  $text = preg_replace( "(www\.)", "http://www.", $text );

  // Delete duplicates after force.
  $text = preg_replace( "(http://http://www\.)", "http://www.", $text );
  $text = preg_replace( "(https://http://www\.)", "https://www.", $text );

  // The RegEx.
  $regExUrl = "/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

  // Check if there is a URL in the text.
  if(preg_match($regExUrl, $text, $url)) {

    // Make the URLs hyper links.
    $text = preg_replace(
      $regExUrl,
      '<a href="' . $url[0] . '" rel="nofollow" target="_blank">' . $url[0] . '</a>',
      $text
    );

  }    

  return $text;

}

共有1个答案

满俊楠
2023-03-14

您有一些语法错误(没有转义/)。无论如何,如果您想匹配www.,只需直接将其添加到您的字符串中(记住要转义.,否则它是控制字符)

preg_replace_callback(
'#\b(?<![href|src]=[\'"])(?:http(?:s|):\/\/|)(?:www\.|)[^\s()<>]+(?:\([\w\d]+\)|(?:[^[:punct:]\s]|\/))#', ...);
 类似资料:
  • 在我的控制器中,我有一个用以下映射映射的方法:@PostMapping(“/”)。 此方法需要一个我试图捕获的请求主体,如下所述: 使用这两种方法对我来说都很好,我只是进退两难,如果直接在实体类中接受请求体是一个好主意和最佳实践的话。 我不想在controller类中公开我的实体类,因为我不确定这是否是一个好主意。 java 这两种方法都给出了相同的结果,更多的是关注要遵循的最佳实践。

  • 问题内容: 我正在尝试CSS过滤器,但在我的Firefox(15.0)浏览器中不起作用。 HTML: CSS: 问题答案: GrayScale具有使用-moz-filter在Firefox中运行的限制。 要使其正常工作,请使用以下代码段:

  • 我的JUnitRunner无法选择具有JBehave中指定的meta标记的场景。 以下是我的故事: 下面是我的运行程序文件: 当我作为JUnit test运行上述类时,没有调用带有烟雾标记的实际测试,也没有执行任何内容。 下面是我在执行上面的代码时得到的结果

  • 我有一个包含一些字符串值的列表。我想与另一个字符串进行比较来迭代列表。只有当另一个字符串与列表中的任何元素都不匹配时,那么我才应该进入循环。我试过下面这样的东西,但没有效果。在Java8中有没有其他替代方法可以实现同样的功能? 注意:在循环中,我将向同一列表中添加更多的元素。因此,为了避免,我使用if条件进行验证。

  • 问题内容: 我正在尝试获取用户输入的网址的图标,例如 我使用HttpUrlConnection 从主机URL 的扩展名中获取网站图标的位图。 但是,由于用户可能不会指定或,所以我必须自己添加它。我遇到的问题是,如果我在url前面添加,一切都会正常运行,但是对于,某些网站会返回该网站图标,而其他网站只会给我null。我如何找出使用哪个页面?我应该为每种情况添加吗?是否有任何网站严格限制并会返回nul

  • 问题内容: 我的问题很简单,但我找不到答案,也没有自己进行测试的资源。我可以从一个域向另一个HTTPS域发出HTTPS CORS请求吗?我可以从一个域向另一个HTTPS域发出HTTP CORS请求吗?我知道,我可以执行从一个域到另一个HTTP域的HTTP CORS请求,但是当使用HTTPS时,我不知道是否存在任何区别。 谢谢, 菲利普 问题答案: 是的,您可以从一个HTTPS域向另一个HTTPS域