0

この非常に単純な URL bbcoder を調整したいので、リンク先に追加する http:// が含まれていない場合、どうすればよいですか?

    $find = array(
    "/\[url\=(.+?)\](.+?)\[\/url\]/is",
    "/\[url\](.+?)\[\/url\]/is"
    );

    $replace = array(
    "<a href=\"$1\" target=\"_blank\">$2</a>",
    "<a href=\"$1\" target=\"_blank\">$1</a>"
    );

    $body = preg_replace($find, $replace, $body);
4

3 に答える 3

4
if(strpos($string, 'http://') === FALSE) {
    // add http:// to string
}
于 2013-09-04T10:09:59.657 に答える
4

a を使用して存在する場合(http://)?に一致させhttp://、グループの結果を「置換先」パターンで無視して、次のhttp://ように独自の を使用できます。

$find = array(
"/\[url\=(http://)?(.+?)\](.+?)\[\/url\]/is",
"/\[url\](http://)?(.+?)\[\/url\]/is"
);

$replace = array(
"<a href=\"http://$2\" target=\"_blank\">$3</a>",
"<a href=\"http://$2\" target=\"_blank\">$2</a>"
);

$body = preg_replace($find, $replace, $body);
于 2013-09-04T10:16:09.740 に答える
3
// I've added the http:// in the regex, to make it optional, but not remember it,
// than always add it in the replace

$find = array(
    "/\[url\=(?:http://)(.+?)\](.+?)\[\/url\]/is",
    "/\[url\](.+?)\[\/url\]/is"
    );

    $replace = array(
    "<a href=\"http://$1\" target=\"_blank\">$2</a>",
    "<a href=\"http://$1\" target=\"_blank\">http://$1</a>"
    );

    $body = preg_replace($find, $replace, $body);

コールバック関数と を使用する場合はpreg_replace_callback()、次のようなものを使用できます。この方法で実行できます。常に「http://」が追加され、「http://」のない文字列よりも追加されます

$string = 'http://'. str_replace('http://', '', $string);
于 2013-09-04T10:10:49.360 に答える