我有這段代碼,但PHP給了我一個Unknown modifier '?'
錯誤。將所有的HTML標籤轉換爲小寫
任何人都知道我做錯了什麼? (我發現在互聯網上的代碼,因爲我不熟悉的正則表達式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
我有這段代碼,但PHP給了我一個Unknown modifier '?'
錯誤。將所有的HTML標籤轉換爲小寫
任何人都知道我做錯了什麼? (我發現在互聯網上的代碼,因爲我不熟悉的正則表達式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
這你在找什麼後?
爲後人:此代碼將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);
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/>
@TadeuszMajkowski - 正確,使用'preg_replace_callback'如上所示。 –
替換正則表達式</?\w+>
與自己申請小寫
我不使用或推薦的正則表達式解析HTML,但這裏也有一些失誤:
/
符號作爲分隔符,因此您需要在正則表達式中轉義它或使用另一個分隔符;/
不應該在那裏。所以,你的代碼也許應該是這個樣子(使用另一個分隔符):
$newString = preg_replace("#</?\w+#e", "strtolower('\\0')", $old);
有了這個正則表達式,你不確定如果標籤真的有後面的'>' –
@Ωmega我永遠不會使用正則表達式來解析html,所以我只是糾正了錯誤,而不是正則表達式本身。 – jeroen
我同意那部分:) –
下面是處理屬性名稱以及標籤的解決方案。注意這仍然不完全正確;它假定字符>永遠不會在屬性值中找到,例如圖像的替代文本。要正確地做到這一點,請使用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";
不,我希望標籤內的所有文字都是小寫。所以
,所以你希望它CONVER 煩人的資本化到:煩人的資本? –
再次運行代碼,它完全符合你的要求。 –