2011-12-08 26 views
-1

文字列を変換してリンクとして渡すスクリプトを完成させていますが、それ以外にもAPIを使ってURLを短縮しています。問題は、チェーン全体ではなくURLだけを取得する方法を考えることができないということです。関数から値を取得する

機能:

function findAndShort($string) { 
    $text = preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>', $string); 
    return $text; 
} 

例:この場合

$chk = findAndShort("Blahblah http://domain.tld"); 
echo $chk; 

、唯一http://domain.tldを必要とする、私は[0] $のCHKと試みるが、勿論、上の最初の文字を印刷します

+0

あなたはhrefの内部で何を意味するか、少しも簡素化することができます= "..."? –

+2

*問題は、チェーン全体ではなくURLのみを取得する方法を考えることができないということです。*それはどういう意味ですか? 「チェーン」とは何ですか?いくつかのサンプルの入力と出力、そして結果として得たいものを詳しく説明してください。問題をより明確に説明すればするほど、より良い回答が得られます。 –

+0

OK!私は古いAPI(http://paste2.org/p/1814464)を使用してURLを抽出して変換することができました。しかし今、問題は、すべてのリンクを変換できません(問題は'http:// localhost/index.php/topic、28410.0.html'は、'、 'にのみ抽出されます – wiitohzjeh

答えて

0

ちょうどあなたの正規表現の初めに^.*を追加し、代わりに$ 0 $ 1使用:

$text = preg_replace("/^.*((https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#,]*(\?\S+)?)?)?)/u", '<a href="$1">$1</a>', $string); 

あなたはURLで

~^.*((https?|ftps?|mailto)://[-\p{L}\p{N}_.]+(:\d+)?(/([\p{L}\p{N}/_.#,]*(\?\S+)?)?)?)~u 
+0

すべてのテキストはリンクです。私はちょうどリンク自体が必要です。つまり、文字列のURLを取得し、それを変数に変えてください。 – wiitohzjeh

+0

@wiitohzjeh:より多くの括弧を使い、$ 0ではなく$ 1を使用してください。私の編集を参照してください。 – Toto

+0

@wiitohzjeh:文字クラスにコンマ '、'を追加するだけです。私の編集を参照してください。 – Toto

0

機能のあるものは、関数内のreturnの下にある単一の値しか返すことができないため、関数をテストした後、戻り値は元の入力値です。

あなたは機能だけでURLのコンポーネントを返すようにしたい場合は、私が何を知っていれば、私は、HTTPS、FTPまたはmailtoのを探してexplode関数から結果の配列の各部分にpreg_matchを実行し、文字列を区切るためにexplodeを使用します私は、プロセスを停止VARを定義し、私はあなたがリンクのコードを返すようにしたいと考えているように、私はどうなるだろうと働いている配列の一部は、その注意

return '<a href="'.$url.'">'.$url.'</a>';

ような何かをされますvar $urlが上記のプロセスから作成されます。

こちらがお役に立てば幸いです。

関連する問題