作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要一个 c# 方法来对符号进行编码,如果它们还没有被编码或者是另一个编码表达式的一部分的话
例如
"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"
最佳答案
您真正想要做的是,首先解码 字符串,然后再次编码。不要费心尝试修补编码字符串。
任何编码只有在可以轻松解码的情况下才有值(value),因此请重用该逻辑以使您的生活更轻松。而且您的软件更不容易出错。
现在,如果您不确定字符串是否经过编码 - 问题肯定不是字符串本身,而是产生字符串的生态系统。你从哪里弄来的?它在到达你之前经过了谁?你信任它吗?
如果您真的不得不求助于创建一个魔术修复怪异数据函数,那么请考虑构建一个“编码”表及其对应的字符:
& -> &
€ -> €
< -> <
// etc.
然后,首先根据表解码所有遇到的编码,然后重新编码整个字符串。当然,在不先解码的情况下摸索时,您可能会获得更有效的方法。但是明年你就不会正常了。这是你的运营商,对吧?你需要保持头脑清醒!如果你想变得太聪明,你会失去理智的。当你发疯时,你会丢掉工作。可悲的事情发生在那些让维护他们的黑客毁掉他们思想的人身上......
编辑:当然,使用 .NET 库会使您免于疯狂:
我刚刚对其进行了测试,解码其中只有 & 符号的字符串似乎没有问题。那么,继续吧:
string magic(string encodedOrNot)
{
var decoded = HttpUtility.HtmlDecode(encodedOrNot);
return HttpUtility.HtmlEncode(decoded);
}
EDIT#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
关于c# - 如果符号尚未编码,如何对其进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722783/
我是一名优秀的程序员,十分优秀!