XPathインジェクションの回避

詳細はここ
http://www.xmldb.jp/xpriori_forum/developer/tutorial/tutorial_webapplication_9.html

コードもあるけど若干変なので書き直してみた。

public static String escapeXPath(String str) {
    if (str == null) {
        return null;
    }
    if (str.indexOf('"') == -1) {
        return "\"" + str + "\"";
    }
    StringBuilder sb = new StringBuilder("concat(");
    String[] vals = str.split("\\\"", -1);
    for (int i = 0; i < vals.length; i++) {
        if (i != 0) {
            sb.append(",'\"',");
        }
        sb.append('"').append(vals[i]).append('"');
    }
    return sb.append(")").toString();
}

"が連続すると残念出力なのは変わらず。