转换所有的HTML标签为小写(Convert all HTML Tags to lowercase)

2019-10-17 04:24发布

我有这样的代码,但PHP给了我一个Unknown modifier '?' 错误。

任何人都知道我做错了什么? (我发现在互联网上的代码,因为我不熟悉的正则表达式)

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

Answer 1:

这个你要找的是什么?

对于后人:此代码将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);


Answer 2:

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/>


Answer 3:

替换正则表达式</?\w+>与自身应用下壳体后



Answer 4:

我不使用或推荐的正则表达式解析HTML,但这里也有一些失误:

  1. 您正在使用/符号作为分隔符,所以你需要逃避它在正则表达式或使用其他分隔符;
  2. 你有一个额外/结尾的那段不应该存在。

所以,你的代码也许应该是这个样子(使用另一个分隔符):

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


Answer 5:

下面是处理属性名称以及标签的解决方案。 请注意,这还不是完全正确的; 它假定>绝不会在属性值中找到的字符诸如用于图像alt文本。 为了正确地做到这一点,使用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";


文章来源: Convert all HTML Tags to lowercase