2012-06-21 33 views
2

我有一個包含超鏈接的文本,一些超鏈接包含空格,我想將它們轉換爲%20。PHP - 僅在文本鏈接中將空間轉換爲%20

例如:

爲了使超鏈接<a href="http://www.link-to-my-page.com/page 1.html">Page 1</a>

如果我使用rawurlencode函數返回

To%20make%20hyperlinks%20%3Ca%20href%3D%22http%3A%2F%2Fwww.link-to-my-page.com%2Fpage%201.html%22%3EPage%201%3C%2Fa%3E

我寫了下面的RE空間轉換爲%20鏈接轉換上面的文字但我不知道如何將空間(\ s)*與preg_replace結合使用。

/(http|https|ftp|ftps)(\:\/\/[a-zA-Z0-9\-\.]+)(\s)*\.[a-zA-Z]{2,4}(\/\S*)?/ 

任何幫助將不勝感激。

感謝

+0

如果您只是想空間轉換爲%20,你可以使用'$ transformed = str_replace('','%20',$ input);'這是你在找什麼? – Andrew

+0

@Andrew這將導致我在我的問題中提到的相同。 – Maximus

回答

4

做的最簡單的辦法就是使用DOMDocumentlet it fix this for you

$html = 'To make hyperlinks <a href="http://www.link-to-my-page.com/page 1.html">Page 1</a>'; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 

// Save the fixed HTML 
$innerHTML = ''; 
foreach($doc->getElementsByTagName('p')->item(0)->childNodes as $child) { 
    $innerHTML .= $doc->saveHTML($child); 
} 

echo $innerHTML; 

輸出,thanks to this SO question

To make hyperlinks <a href="http://www.link-to-my-page.com/page%201.html">Page 1</a> 
+0

這不是讓我編輯你的文章,但我認爲你是對的,這實際上應該是getElementsByTagName('a')而不是p。 – hsanders

+0

不是不是,看到我鏈接的例子以及另一個SO問題,因爲loadHTML()插入了一個HTML容器,但是整個循環都是爲了擺脫多餘的HTML而需要的。 – nickb

+1

謝謝尼克,這很有幫助。 – Maximus

3

這裏的正確答案是不是正則表達式。這是urlencode()來http://php.net/manual/en/function.urlencode.php

+0

在文本中添加了一個「+」。我認爲@jason只想對一段文字中的鏈接進行urlencode編碼。 – sachleen

+0

然後,他會想要使用正則表達式檢測URL,然後將所有匹配的郵件提供給urlencode()。 – hsanders

+0

我重讀了這個問題,我認爲他應該像@nickb所暗示的那樣實際使用DOMDocument。我以爲他在談論的是將URL回顯成「a」標籤,而不是解析HTML文檔並修復它。雖然它還有點不清楚,但是我傾向於後者 – hsanders