将双引号内的双引号替换为html属性
问题描述:
我有些情况下,我的客户端向我发送一个html字符串,其元素属性结构不正确。就像这样:将双引号内的双引号替换为html属性
<img src="../imgTest.jpg" alt="Something "quoted here, or here"">
我怎样才能动态改变这些情况下,以这样的未来?
<img src="../imgTest.jpg" alt="Something 'quoted here, or here'">
我需要这个html不显示在浏览器上,但要做一些操作。
我使用HtmlAgilityPack控制HTML的问题,但对于这些情况下,它改变了我的html字符串这一点,它是不是我想要的:
<img src="../imgTest.jpg" alt="Something" quoted="" here,="" or="" here="">
我与HtmlAgilityPack代码:
var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(myHtmlStr);
var htmlError = htmlDoc.ParseErrors.SafeAny();
if (!htmlError)
myHtmlStr = htmlDoc.DocumentNode.InnerHtml;
答
我的想法是匹配一个"
,如果它位于标签内而不是属性限定符。免责声明:该解决方案可能无法在100%的情况下工作(如果名称空间添加到元素/属性名称,它将需要适应),但是当标签名称立即跟在<
之后时,它应该有效,使用双引号作为属性值限定符,并且属性内没有符号。
使用
(?<=<\w+\b[^<]*)(?<!\w+=)"(?!\s*/?>|\s+\w+=")
与'
取代。
请参阅regex demo。
第一个向后看可以确保我们正在搜索一个双引号,如果在双引号之前有一个单词跟着一个等号,那么第二个匹配就会失败,否则,如果双引号后跟空格,后跟一个闭角尖括号(可能以正斜杠开头),或者当有空格后面跟着一个单词后跟一个等号。
嗯,恐怕没有正则表达式的解决方案,这将看起来不错,安全。试试['(? | \ s + \ w + =”)'](http:/ /regexstorm.net/tester?p =(%3F%3C%3D%3C%5CW%2B%5CS%5B%5E%3C%5D *)(%3F%3C!%5CW%2B%3d)的22%( %3F!%5CS *%2F%3F%3E%7C%5CS%2B%5CW%2B%3D%22)I =%3cimg + SRC%3D%22%..%2fimgTest.jpg 22 + ALT%3D% 22%+%22quote + here%2c +或+ here%22%22%3e&r =%27)并替换为'''。 –
你的html片段是否像你的例子中的img一样是单个元素?它总是具有相同的属性,它们被破坏了吗? –
你可以尝试像['(= \ s *“[^ =”>] *)“([^ =”>] *)“([^ =”>] *“)'](https:// regex101.com/r/iK0wN9/2),并用'$ 1'$ 2'$ 3'替换,这不是非常可靠:> –