2010-03-12 1 views

답변

3

텍스트에서 임의의 수의 URL을 줄이려면 긴 URL을 사용하고 짧은 URL을 반환하는 함수에 API를 넣으십시오. 그런 다음이 함수를 PHP의 preg_replace_callback 함수를 통해 텍스트에 적용하십시오. 어쩌면 다른 사람이 도움을 줄 수있는 테스트없이 즉석에서 그냥 쓴

<?php 

function shorten_url($matches) { 
    // EDIT: the preg function will supply an array with all submatches 
    $long_url = $matches[0]; 

    // API stuff here... 
    $url = "http://tinyurl.com/api-create.php?url=$long_url"; 
    return file_get_contents($url); 
} 

$text = 'I have a link to http://www.example.com in this string'; 

$textWithShortURLs = preg_replace_callback('|http://([a-z0-9?./=%#]{1,500})|i', 'shorten_url', $text); 
echo $textWithShortURLs; 

?> 

너무 많이 그 패턴에 포함되지 않습니다 : 이것은 다음과 같이 보일 것입니다. 참조 http://php.net/preg-replace-callback

+0

감사합니다.하지만 시도하지 않았습니다. (잘못 사용하지 않는 한) 작동하지 않습니다. $ textWithShortURLs는 짧은 URL로 문자열을 반환해야합니까? – Steven

+0

맞습니다. $ textWith ... 변경된 URL이 포함 된 전체 텍스트가 포함됩니다. 그러나 방금 수정 한 스크립트에 또 다른 실수가있었습니다. 실제로 긴 URL은 $ matches [0]에 있고, $ matches [1]에는 http : //가없는 URL 만 들어 있습니다. –

+0

@ the-banana-king : a-z 대신 a-b를 사용하는 정규식을 수정했습니다. – Erik

0

preg_replace로이 작업을 수행하는 방법에 대한 질문에 답변하려면 e 수정자를 사용할 수 있습니다.