0

だから私は今日自分のサイトをサーバーからキックオフさせたところですが、この機能が原因だと思います。誰かが問題が何であるか教えてもらえますか?私はそれを理解できないようです:

Public Function CleanText(ByVal str As String) As String    
'removes HTML tags and other characters that title tags and descriptions don't like
    If Not String.IsNullOrEmpty(str) Then
        'mini db of extended tags to get rid of
        Dim indexChars() As String = {"<a", "<img", "<input type=""hidden"" name=""tax""", "<input type=""hidden"" name=""handling""", "<span", "<p", "<ul", "<div", "<embed", "<object", "<param"}

        For i As Integer = 0 To indexChars.GetUpperBound(0) 'loop through indexchars array
            Dim indexOfInput As Integer = 0
            Do 'get rid of links
                indexOfInput = str.IndexOf(indexChars(i)) 'find instance of indexChar
                If indexOfInput <> -1 Then
                    Dim indexNextLeftBracket As Integer = str.IndexOf("<", indexOfInput) + 1
                    Dim indexRightBracket As Integer = str.IndexOf(">", indexOfInput) + 1
                    'check to make sure a right bracket hasn't been left off a tag
                    If indexNextLeftBracket > indexRightBracket Then 'normal case
                        str = str.Remove(indexOfInput, indexRightBracket - indexOfInput)
                    Else
                        'add the right bracket right before the next left bracket, just remove everything
                        'in the bad tag
                        str = str.Insert(indexNextLeftBracket - 1, ">")
                        indexRightBracket = str.IndexOf(">", indexOfInput) + 1
                        str = str.Remove(indexOfInput, indexRightBracket - indexOfInput)
                    End If
                End If
            Loop Until indexOfInput = -1
        Next
    End If
    Return str
End Function
4

7 に答える 7

3

この行も間違っています:

Dim indexNextLeftBracket As Integer = str.IndexOf("<", indexOfInput) + 1

この時点で、indexOfInputによって参照される位置の文字はすでに常に「<」であるため、indexNextLeftBracketを常にindexOfInputに等しく設定することが保証されています。代わりにこれを行ってください:

Dim indexNextLeftBracket As Integer = str.IndexOf("<", indexOfInput+1) + 1

また、ifステートメントに句を追加して、文字列がその式に対して十分な長さであることを確認します。

最後に、他の人が言っているように、もしあなたがそれを機能させることができれば、このコードは維持するのが獣になるでしょう。正規表現や、すべての「<」を単に置き換えるなど、別の解決策を探すのが最善&lt;です。

于 2009-05-05T02:48:49.610 に答える
1

他の良い答えに加えて、ループ不変条件について少し読むかもしれません。ループを終了するためにチェックした文字列に何かを引き出したり戻したりすると、あらゆる種類の警報ベルが鳴ります。:)

于 2009-05-05T02:36:20.453 に答える
0

推測ですが、これは犯人のようなものですか?indexOfInput = str.IndexOf(indexChars(i))'indexCharのインスタンスを検索します

Microsoftのドキュメントによると、戻り値-その文字列が見つかった場合は値のインデックス位置、見つからない場合は-1。値がEmptyの場合、戻り値は0です。

では、おそらくindexOfInputが0に設定されているのでしょうか。

于 2009-05-05T02:11:36.080 に答える