【问题标题】:To be able to find more than one link能够找到多个链接
【发布时间】:2022-11-19 06:28:39
【问题描述】:

代码只能查找和更改文本中的一个图像链接。如果超过一个,则不起作用。我怎样才能让它检测多个图像链接?

$sad222 = "somthing text bla bla bla ...... https://www.indyturk.com/sites/default/files/styles/150x100/public/article/main_image/2022/08/02/984246-1125154792.jpg asdas https://www.indyturk.com/sites/default/files/styles/800x600/public/article/main_image/2022/11/18/1055251-759331593.jpg  121das";
    function findAndChangeImgLinksInStrings($string)
    { 
        $reg_exUrl = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/m'; 
        if (preg_match_all($reg_exUrl, $string, $urls, PREG_SET_ORDER, 0)) {
            foreach ($urls as $url) { 
                $newLinks = $url[0][0];
                if (strstr($newLinks, ":") === false) {
                    $link = 'https://' . $newLinks;
                } else {
                    $link = $newLinks;
                }
                $exploded = explode($link, $string);
                $string_before = $exploded[0];
                $string_after = $exploded[1];
                if (strtolower(substr($link, 0, 7)) == "http://" || strtolower(substr($link, 0, 7)) == "ftps://" || strtolower(substr($link, 0, 8)) == "https://" || strtolower(substr($link, 0, 6)) == "ftp://") {
                    if (strtolower(substr($link, strlen($link) - 4, 4)) == ".jpg" || strtolower(substr($link, strlen($link) - 4, 4)) == ".jpe" || strtolower(substr($link, strlen($link) - 4, 4)) == ".jif" || strtolower(substr($link, strlen($link) - 4, 4)) == ".jfi" || strtolower(substr($link, strlen($link) - 4, 4)) == ".gif" || strtolower(substr($link, strlen($link) - 4, 4)) == ".png" || strtolower(substr($link, strlen($link) - 4, 4)) == ".bmp" || strtolower(substr($link, strlen($link) - 4, 4)) == ".dib" || strtolower(substr($link, strlen($link) - 4, 4)) == ".ico" || strtolower(substr($link, strlen($link) - 5, 5)) == ".jpeg" || strtolower(substr($link, strlen($link) - 5, 5)) == ".jfif" || strtolower(substr($link, strlen($link) - 5, 5)) == ".apng" || strtolower(substr($link, strlen($link) - 5, 5)) == ".tiff" || strtolower(substr($link, strlen($link) - 4, 4)) == ".tif") {
                        $imageCode = erisimKoduOlustur();
                        getFile($link, '/images/' . $imageCode . strtolower(substr($link, strlen($link) - 4, 4)));
                    }
                }
                
                return $string_before . '<a class="noteImageInQNote" href="https://example.com/images/' . $imageCode . strtolower(substr($link, strlen($link) - 4, 4)) . '" target="_blank"><img class="noteImageInQNote" src="https://example.com/images/' . $imageCode . strtolower(substr($link, strlen($link) - 4, 4)) . '"></a>' . $string_after;
            }
        }
        
        return $string;
    }
    
    echo findAndChangeImgLinksInStrings($sad222);

【问题讨论】:

    标签: php regex detection


    【解决方案1】:

    此函数将按空格拆分您的字符串,然后如果它们是包含 .jpg 的 Web 链接,则将它们放入数组中。使用您的示例字符串进行测试。

    $teststring = 'somthing text bla bla bla ...... https://www.indyturk.com/sites/default/files/styles/150x100/public/article/main_image/2022/08/02/984246-1125154792.jpg asdas https://www.indyturk.com/sites/default/files/styles/800x600/public/article/main_image/2022/11/18/1055251-759331593.jpg  121das';
    
    
    function detectimages($string){
        
        $strings = explode(" " , $string);
        
        $imgsarray = array();
        
        foreach($strings as $string){
            
            if(str_contains($string , "https://") && str_contains($string , ".jpg")){
                
                array_push($imgsarray , $string);
                
            }
            
        }
        
        var_dump($imgsarray);
        
    }
    
    detectimages($teststring);
    

    【讨论】:

      【解决方案2】:

      您可以使用 PHP 本机函数以更简单的方式清理代码和搜索。

      首先是模式:/(https?|ftps?)://[^s]*/ 会发现httphttpsFTPFTP服务器.这样一来,您就可以将所有匹配项都放在一个数组中。

      使用路径信息()您可以提取扩展名并检查它是否在一系列想要的扩展名中。

      $sad222        = "somthing text bla bla bla ...... https://www.indyturk.com/sites/default/files/styles/150x100/public/article/main_image/2022/08/02/984246-1125154792.jpg asdas https://www.indyturk.com/sites/default/files/styles/800x600/public/article/main_image/2022/11/18/1055251-759331593.jpg  121das";
      
      $findImageUrls = function (string $string): array {
          $images = [];
          preg_match_all('/(https?|ftps?)://[^s]*/m', $string, $urls);
          foreach ($urls[0] as $url) {
              if (!in_array(strtolower(pathinfo($url, PATHINFO_EXTENSION)),
                      ['jpg', 'jpe', 'jpeg', 'jif', 'jfif', 'jfi', 'png', 'gif', 'bmp', 'dib', 'ico', 'apng', 'tiff', 'tif'])
              ) continue;
              $images[] = $url;
          }
      
          return $images;
      };
      
      print_r($findImageUrls($sad222));
      

      输出

      Array
      (
          [0] => https://www.indyturk.com/sites/default/files/styles/150x100/public/article/main_image/2022/08/02/984246-1125154792.jpg
          [1] => https://www.indyturk.com/sites/default/files/styles/800x600/public/article/main_image/2022/11/18/1055251-759331593.jpg
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 2012-03-22
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多