2010-04-28 15 views
6

所以這裏是我的情況,以及我提出解決問題的解決方案。我創建了一個包含TinyMCE的應用程序,允許用戶創建用於發佈的HTML內容。用戶可以在其標記中包含圖像,並拖動/調整影響IMG標記中最終寬度/高度屬性的圖像的大小。這非常棒,用戶可以包含圖像並調整大小/將其重新定位到所需的外觀。但是一個大問題是,我現在正在向客戶端發送(可能)更大的圖像,只是讓瀏覽器將圖像調整爲所需的寬度/高度屬性。所有的帶寬和失去的加載時間....正則表達式生成縮略圖!?!?! (但是那太瘋狂了!)

所以我的解決方案是預處理我的用戶標記內容,掃描所有的IMG標籤和解析出高度/寬度/源屬性。然後將每個img的SRC標籤設置爲一個phpThumb請求,並將解析後的高度/寬度傳遞到縮略圖URL中。這將創建我縮小尺寸的圖像(以CPU和緩存爲代價優化帶寬)。你對這個解決方案有什麼看法?我見過其他人在使用mod_rewrite做類似的事情,但我想影響頁面服務的內容,而不是在收到圖像請求時處理它們。 ....對這個設計有什麼想法?

我需要一些幫助,因爲我的正則表達式技能需要一些工作,但我時間很短,並承諾很快支付我的技術知識債務。爲了使正則表達式更容易,我可以確定一些事情。只有需要此處理的img標記將具有現有的寬度=「」height =「」屬性(使用雙引號和較低的基本文本,但我認爲如果TinyMCE更改,匹配文本不區分大小寫會更好)

所以一個正則表達式只匹配必要的Img標籤,另外三個正則表達式可以提取src,寬度和高度?

謝謝大家。

+2

你有沒有考慮過使用HTML解析器?或者這不是一個選擇? – pinkgothic 2010-04-28 17:04:01

+1

我同意,選擇正則表達式會增加項目的重大不確定性。它可能比程序性解決方案實現起來要快一些,或者它可能慢得多(假設你注入了QA或用戶捕獲的問題)。至少一個程序化的解決方案是有界的。 – 2010-04-28 17:07:17

回答

3

我認爲使用regexs這是一個壞主意,你會更好使用它像PHP Simple HTML DOM Parser,那麼你可以這樣做解析:

// Load HTML from a string 
$html->load($your_posted_content); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 
+0

我已經使用您建議的簡單HTML DOM解析器實現了我的解決方案。它像一個魅力:) – CryptoMonkey 2010-04-28 20:16:51

+0

好消息。對於許多類似的任務來說,這也是一個方便的技術。 – 2010-04-29 00:15:25

0

一般來說,RegEx is not good for HTML parsing。但在如果您將範圍限制在非常窄的範圍內(即僅搜索width=".."height=".."屬性或類似屬性),那麼您可能會忽略它。

一個更好的解決方案可能是異步地從TinyMCE傳輸內容,對場景進行behing,並用適當的HTML/XML解析器處理服務器端,然後在完成編輯器後更新編輯器的內容。

+0

讓我們不要忘記http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 - 如果只因爲那匹馬不可能被打死*足夠*。 ;)[免責聲明:鏈接只是幽默,不要期待一個偉大的新見識或任何東西。] – pinkgothic 2010-04-28 17:11:14

+0

和是的..有那個帖子太.. :) – 2010-04-28 17:14:32

+0

這很有趣:) – CryptoMonkey 2010-04-28 17:19:42

1

嘗試這種情況:

(?i)<img(?>\s+(?>src="([^"]*)"|width="([^"]*)"|height="([^"]*)"|\w+="[^"]*"))+

,將匹配的任何圖像標記,並且如果該srcwidth,和height屬性都存在,它們的值將被存儲在組1,2,和3分別。但它不會需要這些屬性中的任何一個,因此您需要在處理之前驗證所有三個組都包含值。