1

如何让我的 C# 代码识别“ö”?

查询的输出很好并且格式化了所有特殊字符都是可见的,但是在代码隐藏中,我不能使用它们进行排序。

例子:

if (link.Contains("teborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

将给出几个标题为“Göteborg”的结果,但是:

if (link.Contains("Göteborg"))
{
    CountRss++;
    Response.Write("<p class='RssCont'><a href='" + link + "' target='new'><b>" + title + "</b></a><br/>");
    Response.Write(description + "</p>");
}

根本不会给出任何结果。

4

2 回答 2

0

如果您的代码正确呈现链接,则应该对其进行编码,因此不会包含非 ASCII 字符。

根据 url 中单词的位置,您可能需要搜索不同的文本以找到匹配项。

请注意,使用适当的 Uri 类来处理 url 将使生活更轻松。还要确保你有正确编码的链接,以避免页面上的脚本注入攻击。

于 2012-08-18T08:30:03.513 回答
0

您的代码非常明智且与代码一样好,问题在于数据。这里有四种一般可能性。

第一个是编码问题,但我怀疑情况是否如此,因为你说它渲染没问题,所以我非常怀疑这是问题所在,否则你也会遇到问题。

其二是组成öö形成之间的冲突o。这不太可能,但是将字符串放入 NFC 中link.Normalize()会捕捉到这一点。

第三是因为它是一个 URI,它可能是 URI 而不是 IURI 形式。所以它会是G%c3%b6teborg(事实上,它可能是G%C3%b6teborgG%c3%B6teborgG%C3%B6teborg)。Uri.UnescapeDataString(link)使用或任何各种方法对字符串进行转义。这是我打赌的。

第四个是它可以被XML转义(因为它是从RSS来判断使用的名称),在这种情况下HtmlDecode应该将其分类为禁止定义其他实体的DTD,HTML的编码是XML的超集。但是,这只有在您使用基于文本而不是基于 XML 的方法解析 RSS 时才有可能,在这种情况下您会遇到更大的问题。如果您使用的是 XmlReader 或 XmlDocument 或任何其他基于 XML 的类,则此解码将在必要时为您完成,所以这不是问题。

因此,到目前为止,第三个似乎最有可能,而且Uri.UnescapeDataString(link)似乎最有希望。

You might want a less precise check that case-sensitive exact char for char. Other methods will let you match göteborg and GÖTEBORG too. There are also some that would e.g. match goeteborg (it's common to transliterate ö to oe in English - this is more often done with German than Swedish but it might still be done). (Matching e.g. the English Gothenburg or the Danish Gøteborg is a much more involved matter).

于 2012-08-18T10:06:17.650 回答