2014-03-30 166 views
0

所以我利用它編碼的超鏈接像這樣的API的:PHP:更換明顯超鏈接到HTML超鏈接

<u>\n\\*HYPERLINK \"http://www.youtube.com/watch?v=A0VUsoeT9aM\"A Youtube video</u> 

我想將它們轉換爲只是正常的超鏈接:

<a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">A Youtube video</a> 

我有一些問題,因爲它使用了大量反斜線和報價

所以我想,也許這會工作:

<? 
$string = '<u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>'; 
$patterns = array(); 
$patterns[0] = '/(<u>....................)/g'; 
$patterns[1] = '/(\\\\")(?!http:\/\/)/g"'; 
$patterns[2] = '/(<\/u>)/g'; 
$replacements = array(); 
$replacements[2] = '<a href='; 
$replacements[1] = '"'; 
$replacements[0] = '</a>'; 
echo preg_replace($patterns, $replacements, $string); 
?> 

但答:這是行不通的:警告:的preg_replace():未知的修飾詞「G」在X.php在線11

和B.如果超鏈接的文本是這不起作用一個URL太

+0

使用API​​而不是將其重新編碼 – sshashank124

+0

你是什麼意思?我使用一個明顯的API,我現在必須使用... – MegaCookie

回答

0

試試這個:

$string = '<u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>'; 
$pattern = '/http[?.:=\\w\\d\\/]*/'; 
$namePattern = '/(?:")([\\s\\w]*)</'; 
preg_match($pattern, $string, $matches); 
preg_match($namePattern, $string, $nameMatches); 

echo 'a href="'.$matches[0].'">'.$nameMatches[1].'/a>'; 
//outputs <a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">A Youtube Video</a> 

編輯:改變,這樣的名字也被提取。

+0

感謝這對Url部分的作品,但我想獲得的鏈接的名稱也太難了:( – MegaCookie

+0

非常感謝你!我是隻是正則表達式中的noob! – MegaCookie

+0

你能幫我把文本變量中的所有這些鏈接都替換掉嗎? – MegaCookie