Отделить URL от строки? - PullRequest
       3

Отделить URL от строки?

2 голосов
/ 19 апреля 2011

У меня есть область профиля пользователя в текстовом поле, где пользователи будут помещать URL-адреса rss, разделенные «return», или каждый URL-адрес в каждой строке.Затем он будет сохранен в базе данных.Теперь, как мне получить все URL-адреса в массиве?

Я знаю, что это очень простой вопрос.Поискал в интернете, нашел много вещей и я запутался.Как я думаю, что небольшое обсуждение поможет.

Я также хочу провести некоторую проверку, например, если пользователи не помещают http: // перед URL, код добавит его.И игнорируйте URL-адреса, отличные от http: // protocol.

Моя CMS - это Wordpress, поэтому, если есть какие-то встроенные функции, которые могут мне помочь, дайте мне знать.

Ответы [ 3 ]

4 голосов
/ 19 апреля 2011

После использования функции разнесения вы захотите сделать foreach, чтобы выполнить проверку, которую вы ищете

$urlArray = explode("\r", $_POST["textBox"])
if(!empty($urlArray))
{
    foreach($urlArray as $url)
    {
         //Do your regex checking here
    }
}

В зависимости от вашего уровня квалификации, если RegEx слишком сложный (хотя я бы действительнорекомендуем изучить его) вы можете посмотреть на использование substr для оценки каждой из строк html, хотя это гораздо менее мощная версия.Примером может быть:

$htmlString = substr($url, 0, 7);
if($htmlString != "http://")
{
  $url = "http://" . $url;
}
1 голос
/ 19 апреля 2011

использовать PHP-функцию разнесения:

$urlArray = explode("\r", $POST["URlsInputName"])

Будет возвращен массив URL-адресов, если предположить, что $ POST ["URlsInputName"] содержит значение вашего поля ввода, содержащее URL-адреса, разделенные возвратом каретки.

0 голосов
/ 19 апреля 2011

Ниже следует основной блок:

$text_box_text = <<<TEXT_BOX
        http://example.com
        hello.example
        ftp://ftp.invalid
        HTTP:/fixslash.invalid
TEXT_BOX
;

function url_map ( $likely )
{
    $likely = preg_replace( '/^\s+/', '', $likely );   #clean up white spaces
    $likely = preg_replace( '/\s+$/', '', $likely );   #
    $likely = preg_match( '/^\w+:/', $likely ) ? $likely : "http://$likely";  #prepend
    $likely = preg_replace( '|^http:/*|i', 'http://', $likely );   #fix /s and case
    return $likely;
}

$likely_urls = preg_split( '/[\r\n]+/', $text_box_text );
$good_urls = preg_grep( '/^http:/', array_map( "url_map",  $likely_urls ) );

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

preg_grep( '|^http://[-\w][-.\w]+/|', ... )   #assure valid host name

и более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...