2014-02-03 2 views
-1

Я хотел бы, чтобы найти все адреса в строке (завиток результаты), а затем закодировать любые строки запроса в этих результатах, примерНайти все URLS в строке и закодировать строку запроса? найден

URLs:

http://www.example.com/index.php?favoritecolor=blue&favoritefood=sharwarma 

заменить все эти URLS найденных с закодированной строкой (я могу сделать только один из них)

http%3A%2F%2Fwww.example.com%2Findex.php%3Ffavoritecolor%3Dblue%26favoritefood%3Dsharwarma 

, но сделать это в HTML завитка ответ, найти все URLS из HTML-страницы. Благодарим вас за продвинутый, я искал часы.

+1

Используйте 'preg_replace_callback()' 'вызвать urlencode' на каждом URL, который вы найдете в строке , – Barmar

+0

Почему мы не видим ваш код в вашем вопросе? – anubhava

+0

У вас будет более 1 URL-адреса в строке. P.S.-Можете ли вы пояснить немного больше, что вы хотите сделать? – akki

ответ

0

Это сделает то, что вы хотите, если ваш результат CURL является HTML-страницей, и вам нужны только ссылки a (а не изображения или другие элементы, которые можно кликать).

$xml = new DOMDocument(); 

// $html should be your CURL result 
$xml->loadHTML($html); 

// or you can do that directly by providing the requested page's URL to loadHTMLFile 
// $xml->loadHTMLFile("http://..."); 

// this array will contain all links 
$links = array(); 

// loop through all "a" elements 
foreach ($xml->getElementsByTagName("a") as $link) { 
    // URL-encodes the link's URL and adds it to the previous array 
    $links[] = urlencode($link->getAttribute("href")); 
} 

// now do whatever you want with that array 

$links массив будет содержать все ссылки, найденные на странице в URL-закодированные формате.

Edit: если вы вместо этого хотите заменить все ссылки на страницы, сохраняя при этом все остальное, что лучше использовать DOMDocument чем регулярные выражения (связанные с: why you shouldn't use regex to handle HTML), вот сокращенная версия моего кода, который заменяет все ссылки с URL закодирована эквивалент и затем сохраняет страницу в переменную:

$xml = new DOMDocument(); 

// $html should be your CURL result 
$xml->loadHTML($html); 

// loop through all "a" elements 
foreach ($xml->getElementsByTagName("a") as $link) { 
    // gets original (non URL-encoded link) 
    $original = $link->getAttribute("href"); 

    // sets new link to URL-encoded format 
    $link->setAttribute("href", urlencode($original)); 
} 

// save modified page to a variable 
$page = $xml->saveHTML(); 

// now do whatever you want with that modified page, for example you can "echo" it 
echo $page; 

код основан на this.

+0

не использовать htmlDOM для отслеживания html. этот quastion говорит «как найти URL-адреса в тексте' not html' ' –

+0

htmlDOM очень плохой и использует максимальное аппаратное обеспечение ... –

+0

@MahmoudEskandari 'найти все URL-адреса в строке (результаты скручивания)' и 'найти все URL-адреса с html-страницы 'ясно говорят, что OP хочет работать с HTML-страницей, и, на мой взгляд, это самый чистый способ сделать это. –

0

Не использовать PHP Дом непосредственно, это будет замедлять время выполнения, используйте simplehtmldom, его легко

function decodes($data){ 
foreach($data->find('a') as $hres){ 
$bbs=$hres->href; 
$hres->__set("href", urlencode($bbs)); 
} 
return $data; 
} 
Смежные вопросы