如何才能将所有单引号转换为所有HTML标记中的双引号?有更简单的方法吗? 谢谢:))
例如: 如何转换此字符串(来自我工作的实际数据):
<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style="font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>
对此:
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Verdana" style="font-size:10" COLOR="#0B333C">My name's Mark</FONT></P></TEXTFORMAT>
答案 0 :(得分:3)
我假设当你在所有html标签中说,你的意思是所有包含属性的单引号。你不希望<a onclick="alert('hi')">
转换为b / c它会破坏代码。
任何正则表达式都将是脆弱的。如果您知道您的输入将是一组特定的简单案例,您可以使用正则表达式。否则,您将需要一个能够理解复杂html标记的DOM解析器,例如onmouseover="(function () { document.getElementById(''); alert(\"...\")...})()"
(例如)。除此之外,属性可以跨越多行。 ;)
我最近没有必要解决这个问题,但也许有一个很好的方法可以使用HTML Tidy(更多这里:http://devzone.zend.com/article/761)或类似这样的解析器{{3} }
答案 1 :(得分:3)
如果您不关心其他地方提到的JavaScript和CSS问题,请尝试以下方法:
$text = "<TEXTFORMAT LEADING='2'><P ALIGN='LEFT'><FONT FACE='Verdana' style='font-size:10' COLOR='#0B333C'>My name's Mark</FONT></P></TEXTFORMAT>";
echo preg_replace('/<([^<>]+)>/e', '"<" . str_replace("\\\\\'", \'"\', "$1") . ">"', $text);
这是由某人在devshed.com处遇到与您完全相同的问题从某个帖子中获取的。
答案 2 :(得分:1)
我知道我可以使用正则表达式,但尝试一下:使用 fpen(),fread()等分配 $ string 内容......
$string = str_replace("'", '"', $string);
$array = explode('>', $string);
foreach($array as $key => $value){
if(strpos($value, '<') <> 0 ){
$array[$key] = str_replace('"', "'",$value);
}
}
$string = implode('>',$array);
答案 3 :(得分:0)
确实不确定你要完成什么...使用php替换字符串片段可以使用str_replace函数完成:
str_replace("'", "\"", $yourString);
答案 4 :(得分:0)
使用Tidy可以修复HTML汤并输出干净的XHTML。它还有其他好处,比如修复嵌套问题,降低标记等等。
答案 5 :(得分:0)
我会使用dom解析器或滚动我自己的简单标记解析器,该解析器理解引用以及转义引号字符,这样它就不会"he said \"blah\""
作为he said \
,{{1} }和空字符串。
它可以检测到要修改的引用是否容易在标记内。多年来,我了解到正则表达式对于此类任务来说太脆弱了。