2009-07-11 39 views
11

Nếu tôi có chuỗi chứa url (ví dụ vì lợi ích, chúng tôi sẽ gọi nó là url $) chẳng hạn như;PHP Xóa URL khỏi chuỗi

$url = "Here is a funny site http://www.tunyurl.com/34934"; 

Làm cách nào để xóa URL khỏi chuỗi? Khó khăn là, các url cũng có thể hiển thị mà không có http: //, chẳng hạn như;

$url = "Here is another funny site www.tinyurl.com/55555"; 

Hiện không có HTML. Làm cách nào để tôi bắt đầu tìm kiếm nếu http hoặc www tồn tại, sau đó xóa văn bản/số/ký hiệu cho đến khi không gian đầu tiên?

+0

Chúng ta đang nói về EXTRACTING url từ dây hoặc tháo liên kết thực tế? $ url = "Đây là một trang vui khác www.tinyurl.com/55555"; (giải nén) $ url = "Đây là một trang vui khác www.tinyurl.com/55555"; và $ someVar = 'www.tinyurl.com/55555'; (xoá) $ url = "Đây là một trang web hài hước khác"; – tomzx

Trả lời

35

Tôi đọc lại câu hỏi, đây là một chức năng mà sẽ làm việc như mong đợi:

function cleaner($url) { 
    $U = explode(' ',$url); 

    $W =array(); 
    foreach ($U as $k => $u) { 
    if (stristr($u,'http') || (count(explode('.',$u)) > 1)) { 
     unset($U[$k]); 
     return cleaner(implode(' ',$U)); 
    } 
    } 
    return implode(' ',$U); 
} 

$url = "Here is another funny site www.tinyurl.com/55555 and http://www.tinyurl.com/55555 and img.hostingsite.com/badpic.jpg"; 
echo "Cleaned: " . cleaner($url); 

Chỉnh sửa # 2/# 3 (Tôi phải chán). Dưới đây là một phiên bản xác minh có một TLD trong URL:

function containsTLD($string) { 
    preg_match(
    "/(AC($|\/)|\.AD($|\/)|\.AE($|\/)|\.AERO($|\/)|\.AF($|\/)|\.AG($|\/)|\.AI($|\/)|\.AL($|\/)|\.AM($|\/)|\.AN($|\/)|\.AO($|\/)|\.AQ($|\/)|\.AR($|\/)|\.ARPA($|\/)|\.AS($|\/)|\.ASIA($|\/)|\.AT($|\/)|\.AU($|\/)|\.AW($|\/)|\.AX($|\/)|\.AZ($|\/)|\.BA($|\/)|\.BB($|\/)|\.BD($|\/)|\.BE($|\/)|\.BF($|\/)|\.BG($|\/)|\.BH($|\/)|\.BI($|\/)|\.BIZ($|\/)|\.BJ($|\/)|\.BM($|\/)|\.BN($|\/)|\.BO($|\/)|\.BR($|\/)|\.BS($|\/)|\.BT($|\/)|\.BV($|\/)|\.BW($|\/)|\.BY($|\/)|\.BZ($|\/)|\.CA($|\/)|\.CAT($|\/)|\.CC($|\/)|\.CD($|\/)|\.CF($|\/)|\.CG($|\/)|\.CH($|\/)|\.CI($|\/)|\.CK($|\/)|\.CL($|\/)|\.CM($|\/)|\.CN($|\/)|\.CO($|\/)|\.COM($|\/)|\.COOP($|\/)|\.CR($|\/)|\.CU($|\/)|\.CV($|\/)|\.CX($|\/)|\.CY($|\/)|\.CZ($|\/)|\.DE($|\/)|\.DJ($|\/)|\.DK($|\/)|\.DM($|\/)|\.DO($|\/)|\.DZ($|\/)|\.EC($|\/)|\.EDU($|\/)|\.EE($|\/)|\.EG($|\/)|\.ER($|\/)|\.ES($|\/)|\.ET($|\/)|\.EU($|\/)|\.FI($|\/)|\.FJ($|\/)|\.FK($|\/)|\.FM($|\/)|\.FO($|\/)|\.FR($|\/)|\.GA($|\/)|\.GB($|\/)|\.GD($|\/)|\.GE($|\/)|\.GF($|\/)|\.GG($|\/)|\.GH($|\/)|\.GI($|\/)|\.GL($|\/)|\.GM($|\/)|\.GN($|\/)|\.GOV($|\/)|\.GP($|\/)|\.GQ($|\/)|\.GR($|\/)|\.GS($|\/)|\.GT($|\/)|\.GU($|\/)|\.GW($|\/)|\.GY($|\/)|\.HK($|\/)|\.HM($|\/)|\.HN($|\/)|\.HR($|\/)|\.HT($|\/)|\.HU($|\/)|\.ID($|\/)|\.IE($|\/)|\.IL($|\/)|\.IM($|\/)|\.IN($|\/)|\.INFO($|\/)|\.INT($|\/)|\.IO($|\/)|\.IQ($|\/)|\.IR($|\/)|\.IS($|\/)|\.IT($|\/)|\.JE($|\/)|\.JM($|\/)|\.JO($|\/)|\.JOBS($|\/)|\.JP($|\/)|\.KE($|\/)|\.KG($|\/)|\.KH($|\/)|\.KI($|\/)|\.KM($|\/)|\.KN($|\/)|\.KP($|\/)|\.KR($|\/)|\.KW($|\/)|\.KY($|\/)|\.KZ($|\/)|\.LA($|\/)|\.LB($|\/)|\.LC($|\/)|\.LI($|\/)|\.LK($|\/)|\.LR($|\/)|\.LS($|\/)|\.LT($|\/)|\.LU($|\/)|\.LV($|\/)|\.LY($|\/)|\.MA($|\/)|\.MC($|\/)|\.MD($|\/)|\.ME($|\/)|\.MG($|\/)|\.MH($|\/)|\.MIL($|\/)|\.MK($|\/)|\.ML($|\/)|\.MM($|\/)|\.MN($|\/)|\.MO($|\/)|\.MOBI($|\/)|\.MP($|\/)|\.MQ($|\/)|\.MR($|\/)|\.MS($|\/)|\.MT($|\/)|\.MU($|\/)|\.MUSEUM($|\/)|\.MV($|\/)|\.MW($|\/)|\.MX($|\/)|\.MY($|\/)|\.MZ($|\/)|\.NA($|\/)|\.NAME($|\/)|\.NC($|\/)|\.NE($|\/)|\.NET($|\/)|\.NF($|\/)|\.NG($|\/)|\.NI($|\/)|\.NL($|\/)|\.NO($|\/)|\.NP($|\/)|\.NR($|\/)|\.NU($|\/)|\.NZ($|\/)|\.OM($|\/)|\.ORG($|\/)|\.PA($|\/)|\.PE($|\/)|\.PF($|\/)|\.PG($|\/)|\.PH($|\/)|\.PK($|\/)|\.PL($|\/)|\.PM($|\/)|\.PN($|\/)|\.PR($|\/)|\.PRO($|\/)|\.PS($|\/)|\.PT($|\/)|\.PW($|\/)|\.PY($|\/)|\.QA($|\/)|\.RE($|\/)|\.RO($|\/)|\.RS($|\/)|\.RU($|\/)|\.RW($|\/)|\.SA($|\/)|\.SB($|\/)|\.SC($|\/)|\.SD($|\/)|\.SE($|\/)|\.SG($|\/)|\.SH($|\/)|\.SI($|\/)|\.SJ($|\/)|\.SK($|\/)|\.SL($|\/)|\.SM($|\/)|\.SN($|\/)|\.SO($|\/)|\.SR($|\/)|\.ST($|\/)|\.SU($|\/)|\.SV($|\/)|\.SY($|\/)|\.SZ($|\/)|\.TC($|\/)|\.TD($|\/)|\.TEL($|\/)|\.TF($|\/)|\.TG($|\/)|\.TH($|\/)|\.TJ($|\/)|\.TK($|\/)|\.TL($|\/)|\.TM($|\/)|\.TN($|\/)|\.TO($|\/)|\.TP($|\/)|\.TR($|\/)|\.TRAVEL($|\/)|\.TT($|\/)|\.TV($|\/)|\.TW($|\/)|\.TZ($|\/)|\.UA($|\/)|\.UG($|\/)|\.UK($|\/)|\.US($|\/)|\.UY($|\/)|\.UZ($|\/)|\.VA($|\/)|\.VC($|\/)|\.VE($|\/)|\.VG($|\/)|\.VI($|\/)|\.VN($|\/)|\.VU($|\/)|\.WF($|\/)|\.WS($|\/)|\.XN--0ZWM56D($|\/)|\.XN--11B5BS3A9AJ6G($|\/)|\.XN--80AKHBYKNJ4F($|\/)|\.XN--9T4B11YI5A($|\/)|\.XN--DEBA0AD($|\/)|\.XN--G6W251D($|\/)|\.XN--HGBK6AJ7F53BBA($|\/)|\.XN--HLCJ6AYA9ESC7A($|\/)|\.XN--JXALPDLP($|\/)|\.XN--KGBECHTV($|\/)|\.XN--ZCKZAH($|\/)|\.YE($|\/)|\.YT($|\/)|\.YU($|\/)|\.ZA($|\/)|\.ZM($|\/)|\.ZW)/i", 
    $string, 
    $M); 
    $has_tld = (count($M) > 0) ? true : false; 
    return $has_tld; 
} 

function cleaner($url) { 
    $U = explode(' ',$url); 

    $W =array(); 
    foreach ($U as $k => $u) { 
    if (stristr($u,".")) { //only preg_match if there is a dot  
     if (containsTLD($u) === true) { 
     unset($U[$k]); 
     return cleaner(implode(' ',$U)); 
    }  
    } 
    } 
    return implode(' ',$U); 
} 


$url = "Here is another funny site badurl.badone somesite.ca/worse.jpg but this badsite.com www.tinyurl.com/55555 and http://www.tinyurl.com/55555 and img.hostingsite.com/badpic.jpg"; 
echo "Cleaned: " . cleaner($url); 

lợi nhuận:

Cleaned: Here is another funny site badurl.badone but this and and 
+1

ngọt ngào! tôi thích sao chép mã dán mà chỉ hoạt động :) – GeoffreyF67

+0

Cảm ơn bạn đã dành thời gian để mở rộng về điều này. – mrpatg

+0

"Màu này và" có màu xanh dương không? Tôi không muốn chỉnh sửa đầu ra thực tế ;-) –

-1

Bạn cần phải viết cụm từ thông dụng để trích xuất các url.

3

Phân tích văn bản cho URL là chăm chỉ và tìm kiếm tồn tại trước đó, mã thử nghiệm nặng nề đó đã thực hiện điều này cho bạn sẽ tốt hơn viết mã của riêng bạn và các trường hợp bị thiếu cạnh. Ví dụ, tôi sẽ xem xét quy trình trong số urlize của Django, bao gồm các URL trong các neo. Bạn có thể chuyển nó sang PHP và - thay vì gói URL trong một neo - chỉ cần xóa chúng khỏi văn bản.

6
$string = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string); 
0

nhờ mike,

cập nhật một chút, nó trả về lỗi thông báo,

'/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'

$string = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string);

0
$url = "Here is a funny site http://www.tunyurl.com/34934"; 
$replace = 'http www .com .org .net'; 
$with = ''; 

$clean_url = clean($url,$replace,$with); 
echo $clean_url; 

function clean($url,$replace,$with) { 

    $replace = explode(" ",$replace); 
    $new_string = ''; 
    $check = explode(" ",$url); 

    foreach($check AS $key => $value) { 
    foreach($replace AS $key2 => $value2) { 
     if (-1 < strpos(strtolower($value), strtolower($value2)) ) { 
      $value = $with; 
      break; 
     } 
    } 
    $new_string .= " ".$value; 
    } 
return $new_string; 
} 
+0

Bạn có thể cung cấp lời giải thích với mã của mình không? Nó có thể giúp OP hoặc người dùng trong tương lai nhiều hơn. – Bono