2012-06-29 139 views
0

這可能看起來像一個不聰明的人,但事情是我不會事先知道字符串的長度。我的客戶有一個預製的/買博客這增加了YouTube視頻到通過其CMS崗位 - 基本上我想我的功能來搜索字符串類似如下:在字符串中的兩個點之間替換文本

<embed width="425" height="344" type="application/x-shockwave-flash"  pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.youtube.com/somevid"></embed> 

且不論當前的寬度和高度值,我想用我自己的常量替換它們,例如width =「325」height =「244」。有人可以解釋一下最好的方法嗎?

非常感謝提前!

+0

cms是什麼? WordPress的? – biziclop

+0

是的,DOMDocument可以幫助你,找到標籤,替換屬性並保存整個頁面。 –

+0

不是wordpress,只是一些通用博客軟件 – Matt

回答

2

DOMDocument FTW!

<?php 

define("EMBED_WIDTH", 352); 
define("EMBED_HEIGHT", 244); 

$html = <<<HTML 
<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 

<embed width="425" height="344" type="application/x-shockwave-flash" 
     pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.youtube.com/somevid"></embed> 


</body> 
</html> 
HTML; 

$document = new DOMDocument(); 
$document->loadHTML($html); 

$embeds = $document->getElementsByTagName("embed"); 

$pattern = <<<REGEXP 
| 
(https?:\/\/)? # May contain http:// or https:// 
(www\.)?   # May contain www. 
youtube\.com  # Must contain youtube.com 
|xis 
REGEXP; 

foreach ($embeds as $embed) { 
    if (preg_match($pattern, $embed->getAttribute("src"))) { 
     $embed->setAttribute("width", EMBED_WIDTH); 
     $embed->setAttribute("height", EMBED_HEIGHT); 
    } 
} 

echo $document->saveHTML(); 
-2

您應該使用正則表達式替換它。例如:

if(preg_match('#<embed .*type="application/x-shockwave-flash".+</embed>#Us', $originalString)) { 
     $string = preg_replace('#width="\d+"#', MY_WIDTH_CONSTANT, $originalString); 
    } 

「。*」表示任何字符。就像我們在尖銳之後傳遞「s」標誌一樣,我們也接受換行符。 「U」標誌意味着未審理。它會在找到的第一個關閉嵌入標籤處停止。

「\ d +」表示一個或多個數字。

+2

請不要使用正則表達式解析HTML,因爲它會[驅動你瘋狂](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-自包含的標籤/ 1732454#1732454)。改爲使用[HTML解析器](http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)。 –

相關問題