0

私はこのHTMLエスケープメソッドを持っています:

public static String stringToHTMLString(String string) {
    StringBuffer sb = new StringBuffer(string.length());
    // true if last char was blank
    boolean lastWasBlankChar = false;
    int len = string.length();
    char c;

    for (int i = 0; i < len; i++)
        {
        c = string.charAt(i);
        if (c == ' ') {
            // blank gets extra work,
            // this solves the problem you get if you replace all
            // blanks with &nbsp;, if you do that you loss 
            // word breaking
            if (lastWasBlankChar) { // NOT going into this loop
                lastWasBlankChar = false;
                sb.append("&nbsp;");
                }
            else {
                lastWasBlankChar = true;
                sb.append(' ');
                }
            }
        else {
            lastWasBlankChar = false;
            //
            // HTML Special Chars
            if (c == '"')
                sb.append("&quot;");
            else if (c == '&')
                sb.append("&amp;");
            else if (c == '<')
                sb.append("&lt;");
            else if (c == '>')
                sb.append("&gt;");
            else if (c == '\n')
                // Handle Newline
                sb.append("&lt;br/&gt;");
            else {
                int ci = 0xffff & c;
                if (ci < 160 )
                    // nothing special only 7 Bit
                    sb.append(c);
                else {
                    // Not 7 Bit use the unicode system
                    sb.append("&#");
                    sb.append(new Integer(ci).toString());
                    sb.append(';');
                    }
                }
            }
        }
    return sb.toString();
}

文字列「bo y」で渡すと、「bo y」が返されます。入力文字列を「bo>y」に変更すると、文字列が正しくエスケープされます。スペースエスケープが機能しない理由は何ですか?

ありがとう。

4

3 に答える 3

1

あなたのコメントから判断すると、音楽 Web サイトの API の URL で使用される文字列をエスケープしたいと考えています。

サードパーティのライブラリを利用することをお勧めします。

使用できます:      java.net.URLEncoder.encode(String s, String encoding)

例えば

URLEncoder.encode(searchQuery, "UTF-8");

出典: Java での URL クエリ パラメータのエンコード

于 2012-07-28T01:57:19.990 に答える
1

実行すると正常に動作します。次のようになります。

stringToHTMLString("This is  a   multi-space      test")
This is &nbsp;a &nbsp; multi-space &nbsp; &nbsp; &nbsp;test

うーん、そういえば最初のスペースが抜けると思ってた?論理に従ってください。最初は false であるため、最初にスペースで始まり、次に改行なしのスペースで交互に始まります。

これはあなたの実際の質問には答えませんが、あなたがやろうとしていることを行うためのより良い方法はwhite-space: pre-wrap;、要素で CSS を使用することです... IE8+ をサポートすることができれば。それ以外の場合、古い IE の場合は、使用する必要があります

white-space: normal !important;
white-space: pre-wrap;
word-wrap: break-word;

7 ビットセーフ文字の定義も... 興味深いものです。Windows 98 をサポートする必要がない限り、通常とは異なる文字を手動でエスケープするよりも UTF-8 を使用した方がよいかもしれません。おそらく非フォーマット制御コードは完全に削除してください。

于 2012-07-28T00:43:55.437 に答える
0

スタック オーバーフローが 2 番目の文字列をエスケープしたようです。
2番目の「男の子」だったはず「ぼーい」。?

于 2012-07-28T00:39:46.517 に答える