webForumDet fria alternativet

FORM med "-tecken

4 svar · 224 visningar · startad av nicclas

nicclasMedlem sedan feb. 20001 061 inlägg
#1

Jag har denna kod i min servlet:

String searchString = request.getParameter("searchString");

och

out.print("<form name=\"searchbox\" action=\"Search\" ");
out.println("method=POST>");
out.println("<input type=text size=40 name=\"searchString\" value=\""+searchString+"\">");
out.println("<input type=\"submit\" name=\"submit\" value=\"  Sök  \">");
out.println("</form>");

Skriver jag in en sträng tex: nicclas "test test" (inklusive "-tecknen) så blir det fel i den HTML-kod som genereras då det första "-tecknet kommer att avsluta min value-tagg. Lösningen borde vara att "escapa" tecknen (typ addslashes i PHP). Hur göra?

/nicclas

AGMedlem sedan mars 20001 229 inlägg
#2

Det absolut lättaste borde vara att helt skippa "-tecknen i din html-kod. Men det är väl en smakfråga.
Medans ämnet sökmaskiner behandlas kanske det är något som råkar ha en överbliven sökmaskin som hanterar + - "" * etc.

Andreas

nicclasMedlem sedan feb. 20001 061 inlägg
#3

Jo, jag kör https://www.lucene.com och den funkar kanon :)

Att bara skippa "-tecknen i HTML koden löser ju tyvärr inte mitt problem. På något vis måste jag ju hindra att folk matar in "egen HTML-kod" i min sökruta.

SPiNMedlem sedan mars 20005 832 inlägg
#4

Du blir nog tvungen att ersätta förekomster av " med t.ex. &quot; - eftersom att om du bara escape:ar så finns fortfarande \" kvar, och ditt attribut-värde bryts ändå.

private String replace(String haystack, String from, String to) {
	if(haystack.indexOf(from) == -1)
		return haystack;

	StringBuffer stringBuffer = new StringBuffer();
	int start = haystack.indexOf(from);
	int copy = 0;

	while(start != -1) {
		stringBuffer.append(haystack.toCharArray(), copy, start - copy);
		stringBuffer.append(to);

		copy = start + from.length();
		start = haystack.indexOf(from, copy);
	}
	stringBuffer.append(haystack.toCharArray(), copy, haystack.toCharArray().length - copy);

	return stringBuffer.toString();
}
// För att escape:a:
String string = replace ( str, "\"", "\\\"" );
// För att replace:a
String string = replace ( str, "\"", "&amp;quot;" );
nicclasMedlem sedan feb. 20001 061 inlägg
#5

SPiN: Jag har kommit fram till samma sak som du angående escape:ningen, tack så mycket för kodexemplet :)

128 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
125 ms — hämta tråd, inlägg och bilagor (db)