2012-09-01 24 views
0

我有這段代碼,但PHP給了我一個Unknown modifier '?'錯誤。將所有的HTML標籤轉換爲小寫

任何人都知道我做錯了什麼? (我發現在互聯網上的代碼,因爲我不熟悉的正則表達式)

$old = "<FONT></FONT><P></P><TR></TR>"; 
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old); 
echo $newString ."<br/>"; 

回答

0

這你在找什麼後?

爲後人:此代碼將Munge時間屬性的意見和<!CDATA[[]]!>

<?php 

function lowerTags($matches) { 
    return strtolower($matches[1]); 
} 

$old = "<!--BLAH--><FONT COLOR='BLACK'>extra textCAPITALIZED</FONT><P></P><TR></TR>"; 

echo preg_replace_callback("/(<\/?[^!][^>]+)/", 'lowerTags', $old); 
+0

不,我希望標籤內的所有文字都是小寫。所以需求是/ =>/ =><字體顏色= '黑'> –

+0

,所以你希望它CONVER 煩人的資本化到:煩人的資本? –

+0

再次運行代碼,它完全符合你的要求。 –

4

PHP 5.4和更早版本:

$old = "<FONT></FONT><P id='P1'></P><TR></TR>"; 
$newString = preg_replace("/(<\/?\w+)(.*?>)/e", "strtolower('\\1') . '\\2'", $old); 
echo $newString ."<br/>"; 

e修飾符棄用作爲PHP 的5.5.0,請改爲使用preg_replace_callback

$old = "<FONT></FONT><P id='P1'></P><TR></TR>"; 
$newString = preg_replace_callback("/(<\/?\w+)(.*?>)/", function ($m) { 
    return strtolower($m[1]) . $m[2]; }, $old); 
echo $newString ."<br/>"; 

輸出:

<font></font><p id='P1'></p><tr></tr><br/> 
+0

@TadeuszMajkowski - 正確,使用'preg_replace_callback'如上所示。 –

0

替換正則表達式</?\w+>與自己申請小寫

0

我不使用或推薦的正則表達式解析HTML,但這裏也有一些失誤:

  1. 您正在使用/符號作爲分隔符,因此您需要在正則表達式中轉義它或使用另一個分隔符;
  2. 最後還有一個額外的/不應該在那裏。

所以,你的代碼也許應該是這個樣子(使用另一個分隔符):

$newString = preg_replace("#</?\w+#e", "strtolower('\\0')", $old); 
+0

有了這個正則表達式,你不確定如果標籤真的有後面的'>' –

+0

@Ωmega我永遠不會使用正則表達式來解析html,所以我只是糾正了錯誤,而不是正則表達式本身。 – jeroen

+0

我同意那部分:) –

0

下面是處理屬性名稱以及標籤的解決方案。注意這仍然不完全正確;它假定字符>永遠不會在屬性值中找到,例如圖像的替代文本。要正確地做到這一點,請使用DOMDocument類(但請注意解析器在輸入無效時會出現問題)。

<?php 

function lowercase_tag_name_callback(array $m) { 
    return strtolower($m[1]) . lowercase_attribute_name($m[2]); 
} 
function lowercase_attribute_name_callback(array $m) { 
    return ' ' . strtolower($m[1]) . $m[2]; 
} 
// change each attribute name to lowercase 
function lowercase_attribute_name($input) { 
    $output = $input; 
    $output = preg_replace_callback('# ([a-zA-Z]+)(="[^"]+")#', 'lowercase_attribute_name_callback', $output); 
    $output = preg_replace_callback("# ([a-zA-Z]+)(='[^']+')#", 'lowercase_attribute_name_callback', $output); 
    $output = preg_replace_callback('# ([a-zA-Z]+)(=[^"\']+[ >])#', 'lowercase_attribute_name_callback', $output); 
    return $output; 
} 

$input = <<<'EOD' 
<FONT></FONT><P id="P1"></P><TR></TR><IMG SRC="FourFive.jpg" ID='AnIDHere' ALT="FOUR five" CLASS=FourFive><!-- A Comment Here --><![CDATA[ CDATA Text Here ]]> 

EOD; 

$output = preg_replace_callback("#(</?\w+)(.*?>)#", 'lowercase_tag_name_callback', $input); 
print "BEFORE: $input"; 
print " AFTER: $output"; 
相關問題