Определение URL или строки PHP - PullRequest
       1

Определение URL или строки PHP

0 голосов
/ 29 сентября 2011

Я делаю ссылку и текстовый сервис, но у меня есть проблема: есть только 1 форма ввода текста, и пользователь может вставить что-то вроде этого: http:// asdf .com - который будет зарегистрирован как ссылка, или 'asdf http:// test .com' из-за http://, он будет зарегистрирован как URL, или asdf - который будет зарегистрирован как строка, потому что он не содержит http://

НО моя проблема возникает, когда пользователь пишет что-то вроде: asdf <a href="http://asdf.com" rel="nofollow">http://asdf.com</a>, который в моей текущей программе выводит значение "url". Я экспериментирую уже около часа, и у меня есть 3 бита кода (все они были в одном документе с комментариями, так что простите, если они дают ошибки!)

    <?
    $str = $_POST['paste'];
    if(stristr($str, "http://")) {
        $type = "url"; 
    }
    if(stristr($str, "https://")) { 
        $type = "url";
    }
    if($type!="url") { 
        $type = "string";
    } 
    ?>

Далее:

<?
    $type = "url";
        if($type=="url"){
        $t = substr($str, 8);
        if(stristr($t, "https://")==$t){
        $type = "url";}
        if(stristr($t, "https://")==$t){ 
        $type = "url";}
        if(stristr($t, "http://")!=$t){
        $type = "string";}
        if(stristr($t, "https://")!=$t){
        $type = "string";}
        } 
        echo $type;
        ?>

Далее:

<?    
$url = "hasttp://cake.com";
    if(stristr($url, "http://")=="") {
    $type = "string"; } else { 
    $type = "url"; 
    $sus = 1;}
    if(stristr($url, "http://")==$url) { 
    $type = "url"; }
    if($sus==1) { 
    $r = substr($url, 7);
    if(stristr($r,"http://")!="http://") { 
    $type = "url"; }
    if($r=="") {
    $type = "string";
    }
    }
    echo $type;
?>

Я понятия не имею, как я могу классифицировать строку типа 'asdf <a href="http://asdf.com" rel="nofollow">http://asdf.com</a>' как строку, а классифицировать asdf как строку и классифицировать http://asdf.com как URL-адрес. Еще одна идея Я еще не пробовал, но это то, над чем я сейчас работаю.

Есть идеи?

Большое спасибо! :)

Некоторые части этого вопроса почему-то обрезаются, извинения!

Ответы [ 5 ]

4 голосов
/ 29 сентября 2011
$type = '';
if (preg_match('%^https?://[^\s]+$%', $url)) {
    $type = 'url';
} else {
    $type = 'string';
}

Это будет соответствовать любому значению, которое начинается с http:// или https://, и не содержит пробелов типа url. Если значение не начинается с http:// или https:// или содержит пробел, оно будет иметь тип string.

1 голос
/ 29 сентября 2011

PHP parse_url - это ваша функция:

Для серьезно искаженных URL-адресов parse_url () может возвращать FALSE.

Если параметр компонента опущен, ассоциативный массиввернулся.По крайней мере один элемент будет присутствовать в массиве.Потенциальные ключи в этом массиве:

  • схема - например, http
  • host
  • port
  • user
  • pass
  • путь
  • запрос - после знака вопроса?
  • фрагмент - после хеш-метки #

Если указан параметр компонента, parse_url () возвращает строку (или целое число, в случае PHP_URL_PORT) вместо массива.Если запрошенный компонент не существует в указанном URL-адресе, возвращается NULL.

0 голосов
/ 29 сентября 2011
$type = strpos($str, 'http') === 0 ? 'url' : 'string':

Функция strpos возвращает позицию совпадения в строке или FALSE, если совпадения нет.Тройка равно проверяет, что результат не только переводится в 0 (как FALSE сделал бы), но и что он на самом деле также целочисленный (т. Е. Строка начинается с http).

Вы также можете использоватьчто-то вроде

switch (true) {
    case strpos(trim($str), 'http://') === 0: 
    case strpos(trim($str), 'https://') === 0:
        $type = 'url'; 
        break;
    default:
        $type = 'string';
        break; // I know this is not needed, but it is pretty :-)
}
0 голосов
/ 29 сентября 2011

Вы должны использовать регулярное выражение, чтобы проверить, начинается ли строка с http

if(preg_match('/^http/',$string_to_check)){ //this is a url }

0 голосов
/ 29 сентября 2011

Если я правильно понимаю проблему, вы хотите обнаружить, когда пользователь вводит и строку, и URL, и анализировать каждый из них соответственно.

Попробуйте использовать explode(" ", $userInput);, это вернет массив, содержащийвсе строки разделены пробелом.Чем вы можете проверить это для каждого элемента в массиве и установить тип.

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