Questions & Answers

SOLVED
aVogt
Returning Creator

Exalead5.1: Auwertung des Suchstrings (searchString)

Jump to solution

Hallo,

bei Exalead5.1 wird der Suchstring

     Hand* (corporate/tree:"Top/Source/SAB_Intranet")

vom Formular zur Suchseite codiert รผbertragen. Den Suchstring erweitere ich automatisch vor dem Absenden z.B. durch Erweiterung in der zu suchenden Source. Ich erhalte z.B:

     & #72& #97& #110& #100& #42& #32& #40& #99& #111& #114  ....  

(ohne Leerzeichen zwischen & und #) รผber session.getAttribute("searchString").

Damit nur der Suchbegriff auf der Ergebnisseite angezeigt wird, muss ich den Suchstring somit bearbeiten und alles "รผberflรผssige" entfernen z.B. die Source.

Bei Exalead4.3 war das kein Problem, da der Suchstring in dieser Version "lesbar" รผbertragen wurde.

Nun habe ich eine Mรถglichkeit gefunden die Zeichen in "richtige" Buchstaben und Zahlen zu wandeln (mit unescapeHtml4(string) aus org.apache.commons.lang3.StringEscapeUtils).

Allerdings ist es dafรผr notwendig immer ein Semikolon am Ende eines Zeichens einzufรผgen. Also & #72 => & #72;

Gibt es eine einfachere Methode? Bietet Exalead sogar so etwas an?

GrรผรŸe

Andreas

0 Kudos
1 Solution

Accepted Solutions
marro
Crownpeak employee

Hallo,

wenn der Suchstring, wie in diesem Fall, modifiziert werden muss, dann kann er mit folgender Methode unescaped werden:

<%!

    public String unescape(String text) {

        if (text != null) {

            java.util.StringTokenizer st = new java.util.StringTokenizer(text, "&#");

            java.util.ArrayList<Character> charList = new java.util.ArrayList<Character>();

            while (st.hasMoreTokens()) {

                String token = st.nextToken();

                if (token.length() > 0) {

                    Character charToken = (char) Integer.parseInt(token);

                    charList.add(charToken);

                }

            }

            char[] chars = new char[charList.size()];

            for (int i = 0; i < charList.size(); i++) {

                chars[i] = charList.get(i);

            }

            return new String(chars);

        } else return null;

    }

%>

Nach der Bearbeitung des Suchstrings sollte dieser aber wieder escaped werden. Dazu eignet sich folgende Methode:

<%!

    private String escape(final String text) {

        if (text != null) {

            StringBuffer sb = new StringBuffer();

            char[] chars = text.toCharArray();

            for (final char aChar : chars) {

                sb.append("&#").append((int) aChar);

            }

   

            return sb.toString();

        } else return "";

    }

%>

Ein Beispiel fรผr die Nutzung der beiden Methoden, kรถnnten so aussehen:

<%

String queryString = unescape((String) session.getAttribute("searchString"));

...

... Modifikation des queryStrings

...

queryString = escape(queryString);

%>

Viele GrรผรŸe,

Donato

View solution in original post

0 Kudos
2 Replies
marro
Crownpeak employee

Hallo,

wenn der Suchstring, wie in diesem Fall, modifiziert werden muss, dann kann er mit folgender Methode unescaped werden:

<%!

    public String unescape(String text) {

        if (text != null) {

            java.util.StringTokenizer st = new java.util.StringTokenizer(text, "&#");

            java.util.ArrayList<Character> charList = new java.util.ArrayList<Character>();

            while (st.hasMoreTokens()) {

                String token = st.nextToken();

                if (token.length() > 0) {

                    Character charToken = (char) Integer.parseInt(token);

                    charList.add(charToken);

                }

            }

            char[] chars = new char[charList.size()];

            for (int i = 0; i < charList.size(); i++) {

                chars[i] = charList.get(i);

            }

            return new String(chars);

        } else return null;

    }

%>

Nach der Bearbeitung des Suchstrings sollte dieser aber wieder escaped werden. Dazu eignet sich folgende Methode:

<%!

    private String escape(final String text) {

        if (text != null) {

            StringBuffer sb = new StringBuffer();

            char[] chars = text.toCharArray();

            for (final char aChar : chars) {

                sb.append("&#").append((int) aChar);

            }

   

            return sb.toString();

        } else return "";

    }

%>

Ein Beispiel fรผr die Nutzung der beiden Methoden, kรถnnten so aussehen:

<%

String queryString = unescape((String) session.getAttribute("searchString"));

...

... Modifikation des queryStrings

...

queryString = escape(queryString);

%>

Viele GrรผรŸe,

Donato

0 Kudos
aVogt
Returning Creator

VIELEN Dank!

GrรผรŸe

Andreas

0 Kudos

Type a product name