将字符串与字符串分开?

时间:2011-04-19 18:23:00

标签: php string wordpress url

我有一个文本框用户个人资料区域,用户将把rss网址分隔为'return'或每行的每个网址。然后它将保存到数据库。现在我如何获取数组中的所有url?

我知道这是非常基本的问题。搜索网络发现很多东西,我感到困惑。我认为小讨论将如何有所帮助。

我还想进行一些验证,比如如果用户在url之前没有放任何http://,代码会添加它。并忽略除http:// protocols之外的其他URL。

我的CMS是Wordpress,所以如果有任何内置功能可以帮助我告诉我。

3 个答案:

答案 0 :(得分:4)

使用爆炸功能后,您需要做一个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 :(得分:1)

使用PHP的爆炸功能:

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

这将返回一个URL数组,假设$ POST [“URlsInputName”]包含输入框的值,该值包含由回车符分隔的URL。

答案 2 :(得分:0)

基本块如下:

$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

等等。