Intereting Posts
«Пароль не принимается с сервера: 535 Неверные данные аутентификации» при отправке с помощью GMail и phpMailer Отобразить строку, содержащую HTML в шаблоне ветви PHP mySQL – Когда самое лучшее время для отключения от базы данных? Невозможно изменить информацию заголовка – заголовки, уже отправленные … WordPress Issue Как рассчитать интервал между 2 временными метками unix в php БЕЗ деления на 86400 (60 * 60 * 24) отправить ссылку, используя функцию php mail () Прочтите файл csv и создайте еще один файл csv, используя php 5-минутный кэш файлов в PHP Как включить помощника javascript в ErrorHanlder? Как сортировать по номерам сначала с Oracle SQL-запроса? Как централизовать код из моих функций init во всех контроллерах? Хранение и получение пути изображения в базе данных mysql php Получение внутреннего HTML-элемента DomElement в PHP Сделать столбец недействительным в миграции Laravel Привязка модели формы Laravel

Проверьте, содержит ли строка URL-адрес и получает содержимое url php

Вот презентабельный пример того, что я хочу сделать динамически

Предположим, что кто-то вводит строку в textarea подобное этому

«Лучшая поисковая система – www.google.com».

или, может быть

«Лучшая поисковая система – https://www.google.co.in/?gfe_rd=cr&ei=FLB1U4HHG6aJ8Qfc1YHIBA ».

Затем я хочу выделить ссылку в виде stackoverflow . А также я хочу file_get_contents получить одно изображение, краткое описание и название страницы.

Скорее всего, я хочу проверить, содержит ли строка URL-адрес или нет -> два раза.

  • На клавиатуре textarea с использованием jQuery и, следовательно, с помощью get_file_contents
  • Когда строка получена php.

Возможно, как я могу это сделать?

ОБНОВИТЬ

 function parseHyperlinks($text) { // The Regular Expression filter $reg_exUrl1 = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; $reg_exUrl2 = "/[\w\d\.]+\.(com|org|ca|net|uk)/"; // The Text you want to filter for urls // Check if there is a url in the text if(preg_match($reg_exUrl1, $text, $url)) { // make the urls hyper links return preg_replace($reg_exUrl1, "<a class=\"content-link link\" href=\"{$url[0]}\">{$url[0]}</a> ", $text); } else if(preg_match($reg_exUrl2, $text, $url)){ return preg_replace($reg_exUrl2, "<a class=\"content-link link\" href=\"{$url[0]}\">{$url[0]}</a> ", $text); }else{ // if no urls in the text just return the text return $text; } } 
  • Это работает, только если $str='www.google.com is the best' или $str='http://www.google.com is best' но не если $str='http://stackoverflow.com/ and www.google.com is the best'

Сначала вы создаете html, тогда вам нужно обратиться к AJAX для запроса на сервер. Рассмотрим примеры кода:

HTML / JQuery:

 <!-- instead of textarea, you could use an editable div for styling highlights, or if you want, just use a plugin --> <div id="textarea" style=" font-family: monospace; white-space: pre; width: 300px; height: 200px; border: 1px solid #ccc; padding: 5px;">For more tech stuff, check out http://www.tomshardware.com/ for news and updates.</div><br/> <button type="button" id="scrape_site">Scrape</button><br/><br/> <!-- i just used a button to hook up the scraping, you can just bind it on a keyup/keydown. --> <div id="site_output" style="width: 500px;"> <label>Site: <p id="site" style="background-color: gray;"></p></label> <label>Title: <p id="title" style="background-color: gray;"></p></label> <label>Description: <p id="description" style="background-color: gray;"></p></label> <label>Image: <div id="site_image"></div></label> </div> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('#scrape_site').on('click', function(){ var value = $.trim($('#textarea').text()); $('#site, #title, #description').text(''); $('#site_image').empty(); $.ajax({ url: 'index.php', // or you php that will process the text type: 'POST', data: {scrape: true, text: value}, dataType: 'JSON', success: function(response) { $('#site').text(response.url); $('#title').text(response.title); $('#description').text(response.description); $('#site_image').html('<img src="'+response.src+'" id="site_image" />'); } }); }); // you can use an editable div so that it can be styled, // theres to much code already in the answer, you can just get a highlighter plugin to ease your pain $('#textarea').each(function(){ this.contentEditable = true; }); }); </script> 

И на вашем php, который будет обрабатываться, в этом случае (index.php):

 if(isset($_POST['scrape'])) { $text = $_POST['text']; // EXTRACT URL $reg_exurl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; preg_match_all($reg_exurl, $text, $matches); $usedPatterns = array(); $url = ''; foreach($matches[0] as $pattern){ if(!array_key_exists($pattern, $usedPatterns)){ $usedPatterns[$pattern] = true; $url = $pattern; } } // EXTRACT VALUES (scraping of title and descriptions) $doc = new DOMDocument(); $doc->loadHTMLFile($url); $xpath = new DOMXPath($doc); $title = $xpath->query('//title')->item(0)->nodeValue; $description = $xpath->query('/html/head/meta[@name="description"]/@content'); if ($description->length == 0) { $description = "No description meta tag :("; // Found one or more descriptions, loop over them } else { foreach ($description as $info) { $description = $info->value . PHP_EOL; } } $data['description'] = $description; $data['title'] = $title; $data['url'] = $url; // SCRAPING OF IMAGE (the weirdest part) $image_found = false; $data['src'] = ''; $images = array(); // get all possible images and this is a little BIT TOUGH // check for og:image (facebook), some sites have this, so first lets take a look on this meta $facebook_ogimage = $xpath->query("/html/head/meta[@property='og:image']/@content"); foreach($facebook_ogimage as $ogimage) { $data['src'] = $ogimage->nodeValue; $image_found = true; } // desperation search (get images) if(!$image_found) { $image_list = $xpath->query("//img[@src]"); for($i=0;$i<$image_list->length; $i++){ if(strpos($image_list->item($i)->getAttribute("src"), 'ad') === false) { $images[] = $image_list->item($i)->getAttribute("src"); } } if(count($images) > 0) { // if at least one, get it $data['src'] = $images[0]; } } echo json_encode($data); exit; } ?> 

Примечание. Несмотря на то, что это не идеально, вы можете просто использовать это как ссылку только на улучшение и сделать его более динамичным, как вы могли.