我需要ac#方法来编码&符号,如果它们尚未编码或是另一个编码的epxression的一部分
例如
"tom & jill" should become "tom & jill"
"tom & jill" should remain "tom & jill"
"tom € jill" should remain "tom € jill"
"tom <&> jill" should become "tom <&> jill"
"tom "&" jill" should become "tom "&" jill"
Run Code Online (Sandbox Code Playgroud)
Dar*_*mas 11
你真正想要做的是首先解码字符串然后再次编码.不要试图修补编码的字符串.
如果可以轻松解码,任何编码都是值得的,所以重用这种逻辑可以让您的生活更轻松.而且您的软件不易出错.
现在,如果您不确定字符串是否编码 - 问题肯定不是字符串本身,而是产生字符串的生态系统.你是从哪里得到的?在它到达你之前是谁通过了它?你相信吗?
如果你真的不得不求助于创建一个魔法修复奇怪的数据函数,那么考虑构建一个"编码"表及其相应的字符:
& -> &
€ -> €
< -> <
// etc.
Run Code Online (Sandbox Code Playgroud)
然后,首先根据表解码所有遇到的编码,然后重新编码整个字符串.当然,你可能会在没有首先解码的情况下获得更有效的方法.但明年你不会理智.这是你的载体,对吗?你需要保持正确的头脑!如果你想要太聪明,你会失去理智.当你发疯的时候,你会失去工作.令人伤心的事情发生在那些让他们的黑客破坏思想的人身上......
编辑:当然,使用.NET库将使您免于疯狂:
我只是对它进行了测试,它似乎没有问题解码字符串只有&符号.所以请继续:
string magic(string encodedOrNot)
{
var decoded = HttpUtility.HtmlDecode(encodedOrNot);
return HttpUtility.HtmlEncode(decoded);
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:事实证明,解码器HttpUtility.HtmlDecode将适用于您的目的,但编码器不会,因为您不希望编码尖括号(<,>).但编写编码器非常简单:
define encoder(string decoded):
result is a string-builder
for character in decoded:
if character in encoding-table:
result.append(encoding-table[character])
else:
result.append(character)
return result as string
Run Code Online (Sandbox Code Playgroud)
这应该做得很好:
text = Regex.Replace(text, @"
# Match & that is not part of an HTML entity.
& # Match literal &.
(?! # But only if it is NOT...
\w+; # an alphanumeric entity,
| \#[0-9]+; # or a decimal entity,
| \#x[0-9A-F]+; # or a hexadecimal entity.
) # End negative lookahead.",
"&",
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8700 次 |
| 最近记录: |