피드 버너는 자신의 블로그 서비스 리턴이 유사한 자바 스크립트의 블록을 반환하는 결과 변경에 :의 x3c 등을 포함하는 피드 버너 결과를 디코딩하는 방법 너무
나는이 중 원시 HTML을 원하는 X22. 이전에 내가 할 수 있었다 쉽게 사용할 수 있습니다. document.write 구문을 쪼개려면 replace를 사용합니다. 그러나 C#을 사용하여 디코딩하는 방법을 알지 못합니다.document.write를을 ("\ x3cdiv 클래스 \ X3D \ x22feedburnerFeedBlock \ x22 id \ x3d \ x22RitterInsuranceMarketingRSSv3iugf6igask14fl8ok645b6l0 \ x22 \ x3e "); document.write ("\ x3cul \ x3e"); document.write를 ("\ x3cli \ X3E \ x3cspan 클래스 \ X3D \ x22headline \ X22 \ X3E \ x3ca href가 \ X3D \
편집 : 음, 이것은 세미 악몽이었습니다. 마침내 해결하기 위해, 여기에 내가 제공 한 어떤 개선점이 있어도 무엇이 발생 했는가?
public static char ConvertHexToASCII(this string hex)
{
if (hex == null) throw new ArgumentNullException(hex);
return (char)Convert.ToByte(hex, 16);
}
.
private string DecodeFeedburnerHtml(string html)
{
var builder = new StringBuilder(html.Length);
var stack = new Stack<char>(4);
foreach (var chr in html)
{
switch (chr)
{
case '\\':
if (stack.Count == 0)
{
stack.Push(chr);
}
else
{
stack.Clear();
builder.Append(chr);
}
break;
case 'x':
if (stack.Count == 1)
{
stack.Push(chr);
}
else
{
stack.Clear();
builder.Append(chr);
}
break;
default:
if (stack.Count >= 2)
{
stack.Push(chr);
if (stack.Count == 4)
{
//get stack[3]stack[4]
string hexString = string.Format("{1}{0}", stack.Pop(),
stack.Pop());
builder.Append(hexString.ConvertHexToASCII());
stack.Clear();
}
}
else
{
builder.Append(chr);
}
break;
}
}
html = builder.ToString();
return html;
}
내가 더 잘할 수 있는지 잘 모릅니다. 어떤 이유에서든이 코드는 선형 시간 알고리즘인데도 필자는 항상 더러움을 느낍니다. 얼마나 오래 있어야하는지에 관한 것입니다. PHP는 나뭇 가지 인코딩입니다
듣기 위해 놀랍게 우울합니다. –