我正在创建链接和文本服务,但我遇到了一个问题,即:只有一个输入文本表单,用户可以粘贴这样的内容:
http:// asdf .com
- 将注册为链接,或“asdf http:// test .com
”因为http://,它会注册为网址,或者
asdf
- 它将注册为字符串,因为它不包含http://
但是当用户写下以下内容时,我的问题就出现了:
asdf http://asdf.com
,在我当前的程序中输出“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 http://asdf.com
”分类为字符串,同时将“asdf
”分类为字符串,并将“http://asdf.com
”分类为一个网址..我还没有尝试的另一个想法是strpos,但这就是我现在正在做的事情。
有什么想法吗?
非常感谢! :)
这个问题的某些部分由于某种原因而被切断,道歉!
答案 0 :(得分:4)
$type = '';
if (preg_match('%^https?://[^\s]+$%', $url)) {
$type = 'url';
} else {
$type = 'string';
}
这将匹配以http://
或https://
开头的任何值,并且其中不包含url
类型的任何空格。如果该值不以http://
或https://
开头,或者其中包含空格,则其类型为string
。
答案 1 :(得分:1)
PHP parse_url是您的功能:
在严重格式错误的网址上,parse_url()可能会返回FALSE。
如果省略component参数,则返回关联数组。阵列中至少存在一个元素。此数组中的潜在键是:
如果指定了component参数,则parse_url()返回一个字符串(或者在PHP_URL_PORT的情况下为整数)而不是数组。如果请求的组件在给定的URL中不存在,则返回NULL。
答案 2 :(得分:0)
如果我正确理解了这个问题,你想要检测用户何时同时输入字符串和网址,并相应地解析每个字符串。
尝试使用explode(" ", $userInput);
,这将返回一个包含由空格分隔的所有字符串的数组。您可以检查数组中的每个元素并设置类型。
答案 3 :(得分:0)
您应该使用正则表达式来检查字符串是否以http
开头 if(preg_match('/^http/',$string_to_check)){
//this is a url
}
答案 4 :(得分:0)
$type = strpos($str, 'http') === 0 ? 'url' : 'string':
strpos函数返回字符串中匹配的位置,如果不匹配则返回FALSE。 tripple equals检查结果不仅转换为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 :-)
}