将所有HTML标记转换为小写

时间:2012-09-01 17:18:21

标签: php regex preg-replace

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

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

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

5 个答案:

答案 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/>"; 

自{em> 5.5.0 以来e修饰符已弃用,请改用<{1}}:

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

答案 1 :(得分:0)

在应用小写

后用自己替换正则表达式</?\w+>

答案 2 :(得分:0)

这就是你要找的东西?

对于后代:此代码将使用属性注释和<!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);

答案 3 :(得分:0)

我不使用或推荐正则表达式来解析html,但这里有一些错误:

  1. 您使用/符号作为分隔符,因此您需要在正则表达式中将其转义或使用其他分隔符;
  2. 你最后还有一个额外的/
  3. 所以你的代码应该看起来像(使用另一个分隔符):

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

答案 4 :(得分:0)

这是一个处理属性名称和标签的解决方案。注意这仍然不完全正确;它假设字符&gt;永远不会在属性值中找到,例如图像的替代文字。要正确执行此操作,请使用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";