From 306b7ebbb02e1568b211719c9375dae2a34110be Mon Sep 17 00:00:00 2001 From: kelson42 Date: Sun, 30 Dec 2012 16:55:08 +0000 Subject: [PATCH] + fix fulltext result page for pattern including mustbeurlencoded characters --- src/common/kiwix/searcher.cpp | 2 + src/common/resourceTools.h | 83 ++++++++++++++++++----------------- src/common/stringTools.cpp | 56 +++++++++++++++++++++++ src/common/stringTools.h | 3 ++ static/results.tmpl | 6 +-- 5 files changed, 106 insertions(+), 44 deletions(-) diff --git a/src/common/kiwix/searcher.cpp b/src/common/kiwix/searcher.cpp index a5709dff4..219a148ff 100644 --- a/src/common/kiwix/searcher.cpp +++ b/src/common/kiwix/searcher.cpp @@ -197,6 +197,8 @@ namespace kiwix { oData["count"] = kiwix::beautifyInteger(this->estimatedResultCount); oData["searchPattern"] = this->searchPattern; + std::cout << urlEncode(this->searchPattern) << std::endl; + oData["searchPatternEncoded"] = urlEncode(this->searchPattern); oData["resultStart"] = this->resultStart + 1; oData["resultEnd"] = (this->resultEnd > this->estimatedResultCount ? this->estimatedResultCount : this->resultEnd); oData["resultRange"] = this->resultRange; diff --git a/src/common/resourceTools.h b/src/common/resourceTools.h index 1be946a8a..0d4ef5c02 100644 --- a/src/common/resourceTools.h +++ b/src/common/resourceTools.h @@ -160,47 +160,48 @@ const unsigned char results_tmpl[]={ 0x78,0x3e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f, 0x76,0x61,0x72,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x49,0x64,0x3e,0x26,0x70, 0x61,0x74,0x74,0x65,0x72,0x6e,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72, - 0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x61,0x74,0x74,0x65,0x72,0x6e,0x3e,0x26, - 0x73,0x74,0x61,0x72,0x74,0x3d,0x30,0x26,0x65,0x6e,0x64,0x3d,0x3c,0x54,0x4d,0x50, - 0x4c,0x5f,0x76,0x61,0x72,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x52,0x61,0x6e,0x67, - 0x65,0x3e,0x22,0x3e,0xe2,0x97,0x80,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66, - 0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x6c,0x6f, - 0x6f,0x70,0x20,0x70,0x61,0x67,0x65,0x73,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, - 0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x20, - 0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3e,0x63,0x6c,0x61,0x73,0x73,0x3d,0x22, - 0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x22,0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f, - 0x69,0x66,0x3e,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x3c,0x54,0x4d,0x50,0x4c,0x5f, - 0x76,0x61,0x72,0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x72,0x6f,0x74,0x6f,0x63, - 0x6f,0x6c,0x50,0x72,0x65,0x66,0x69,0x78,0x3e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74, - 0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x63,0x6f,0x6e,0x74,0x65, - 0x6e,0x74,0x49,0x64,0x3e,0x26,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x3d,0x3c,0x54, - 0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x61, - 0x74,0x74,0x65,0x72,0x6e,0x3e,0x26,0x73,0x74,0x61,0x72,0x74,0x3d,0x3c,0x54,0x4d, - 0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73,0x74,0x61,0x72,0x74,0x3e,0x26,0x65,0x6e, - 0x64,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x65,0x6e,0x64,0x3e, - 0x22,0x3e,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x6c,0x61,0x62,0x65, - 0x6c,0x3e,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20, - 0x20,0x20,0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f,0x4c,0x4f,0x4f,0x50,0x3e,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x20,0x28,0x72, - 0x65,0x73,0x75,0x6c,0x74,0x4c,0x61,0x73,0x74,0x50,0x61,0x67,0x65,0x53,0x74,0x61, - 0x72,0x74,0x3e,0x30,0x29,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68, - 0x72,0x65,0x66,0x3d,0x22,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73, - 0x65,0x61,0x72,0x63,0x68,0x50,0x72,0x6f,0x74,0x6f,0x63,0x6f,0x6c,0x50,0x72,0x65, - 0x66,0x69,0x78,0x3e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x3c,0x54,0x4d,0x50, - 0x4c,0x5f,0x76,0x61,0x72,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x49,0x64,0x3e, - 0x26,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76, - 0x61,0x72,0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x61,0x74,0x74,0x65,0x72,0x6e, - 0x3e,0x26,0x73,0x74,0x61,0x72,0x74,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61, - 0x72,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x4c,0x61,0x73,0x74,0x50,0x61,0x67,0x65, - 0x53,0x74,0x61,0x72,0x74,0x3e,0x26,0x65,0x6e,0x64,0x3d,0x3c,0x54,0x4d,0x50,0x4c, - 0x5f,0x76,0x61,0x72,0x20,0x28,0x72,0x65,0x73,0x75,0x6c,0x74,0x4c,0x61,0x73,0x74, - 0x50,0x61,0x67,0x65,0x53,0x74,0x61,0x72,0x74,0x2b,0x72,0x65,0x73,0x75,0x6c,0x74, - 0x52,0x61,0x6e,0x67,0x65,0x29,0x3e,0x22,0x3e,0xe2,0x96,0xb6,0x3c,0x2f,0x61,0x3e, - 0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x54,0x4d, - 0x50,0x4c,0x5f,0x69,0x66,0x3e,0x0a,0x20,0x20,0x20,0x20,0x3c,0x2f,0x75,0x6c,0x3e, - 0x20,0x0a,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79, - 0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a + 0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x61,0x74,0x74,0x65,0x72,0x6e,0x45,0x6e, + 0x63,0x6f,0x64,0x65,0x64,0x3e,0x26,0x73,0x74,0x61,0x72,0x74,0x3d,0x30,0x26,0x65, + 0x6e,0x64,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x72,0x65,0x73, + 0x75,0x6c,0x74,0x52,0x61,0x6e,0x67,0x65,0x3e,0x22,0x3e,0xe2,0x97,0x80,0x3c,0x2f, + 0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f, + 0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c, + 0x54,0x4d,0x50,0x4c,0x5f,0x6c,0x6f,0x6f,0x70,0x20,0x70,0x61,0x67,0x65,0x73,0x3e, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x3c,0x54, + 0x4d,0x50,0x4c,0x5f,0x69,0x66,0x20,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x3e, + 0x63,0x6c,0x61,0x73,0x73,0x3d,0x22,0x73,0x65,0x6c,0x65,0x63,0x74,0x65,0x64,0x22, + 0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x3e,0x20,0x68,0x72,0x65,0x66,0x3d, + 0x22,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73,0x65,0x61,0x72,0x63, + 0x68,0x50,0x72,0x6f,0x74,0x6f,0x63,0x6f,0x6c,0x50,0x72,0x65,0x66,0x69,0x78,0x3e, + 0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61, + 0x72,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x49,0x64,0x3e,0x26,0x70,0x61,0x74, + 0x74,0x65,0x72,0x6e,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73, + 0x65,0x61,0x72,0x63,0x68,0x50,0x61,0x74,0x74,0x65,0x72,0x6e,0x45,0x6e,0x63,0x6f, + 0x64,0x65,0x64,0x3e,0x26,0x73,0x74,0x61,0x72,0x74,0x3d,0x3c,0x54,0x4d,0x50,0x4c, + 0x5f,0x76,0x61,0x72,0x20,0x73,0x74,0x61,0x72,0x74,0x3e,0x26,0x65,0x6e,0x64,0x3d, + 0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x65,0x6e,0x64,0x3e,0x22,0x3e, + 0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x6c,0x61,0x62,0x65,0x6c,0x3e, + 0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f,0x4c,0x4f,0x4f,0x50,0x3e,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x20,0x28,0x72,0x65,0x73, + 0x75,0x6c,0x74,0x4c,0x61,0x73,0x74,0x50,0x61,0x67,0x65,0x53,0x74,0x61,0x72,0x74, + 0x3e,0x30,0x29,0x3e,0x0a,0x09,0x3c,0x6c,0x69,0x3e,0x3c,0x61,0x20,0x68,0x72,0x65, + 0x66,0x3d,0x22,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x73,0x65,0x61, + 0x72,0x63,0x68,0x50,0x72,0x6f,0x74,0x6f,0x63,0x6f,0x6c,0x50,0x72,0x65,0x66,0x69, + 0x78,0x3e,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f, + 0x76,0x61,0x72,0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x49,0x64,0x3e,0x26,0x70, + 0x61,0x74,0x74,0x65,0x72,0x6e,0x3d,0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72, + 0x20,0x73,0x65,0x61,0x72,0x63,0x68,0x50,0x61,0x74,0x74,0x65,0x72,0x6e,0x45,0x6e, + 0x63,0x6f,0x64,0x65,0x64,0x3e,0x26,0x73,0x74,0x61,0x72,0x74,0x3d,0x3c,0x54,0x4d, + 0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x4c,0x61,0x73, + 0x74,0x50,0x61,0x67,0x65,0x53,0x74,0x61,0x72,0x74,0x3e,0x26,0x65,0x6e,0x64,0x3d, + 0x3c,0x54,0x4d,0x50,0x4c,0x5f,0x76,0x61,0x72,0x20,0x28,0x72,0x65,0x73,0x75,0x6c, + 0x74,0x4c,0x61,0x73,0x74,0x50,0x61,0x67,0x65,0x53,0x74,0x61,0x72,0x74,0x2b,0x72, + 0x65,0x73,0x75,0x6c,0x74,0x52,0x61,0x6e,0x67,0x65,0x29,0x3e,0x22,0x3e,0xe2,0x96, + 0xb6,0x3c,0x2f,0x61,0x3e,0x3c,0x2f,0x6c,0x69,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20, + 0x20,0x3c,0x2f,0x54,0x4d,0x50,0x4c,0x5f,0x69,0x66,0x3e,0x0a,0x20,0x20,0x20,0x20, + 0x3c,0x2f,0x75,0x6c,0x3e,0x20,0x0a,0x20,0x3c,0x2f,0x64,0x69,0x76,0x3e,0x0a,0x3c, + 0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0a }; const unsigned char server_taskbar_html_part[]={ diff --git a/src/common/stringTools.cpp b/src/common/stringTools.cpp index 9b22e4bf2..da0359edc 100644 --- a/src/common/stringTools.cpp +++ b/src/common/stringTools.cpp @@ -133,4 +133,60 @@ void kiwix::stringReplacement(std::string& str, const std::string& oldStr, const } } +// Urlencode +//based on javascript encodeURIComponent() + +std::string char2hex( char dec ) +{ + char dig1 = (dec&0xF0)>>4; + char dig2 = (dec&0x0F); + if ( 0<= dig1 && dig1<= 9) dig1+=48; //0,48inascii + if (10<= dig1 && dig1<=15) dig1+=97-10; //a,97inascii + if ( 0<= dig2 && dig2<= 9) dig2+=48; + if (10<= dig2 && dig2<=15) dig2+=97-10; + + std::string r; + r.append( &dig1, 1); + r.append( &dig2, 1); + return r; +} + +std::string kiwix::urlEncode(const std::string &c) { + std::string escaped=""; + int max = c.length(); + for(int i=0; i(ii); + ret+=ch; + i=i+2; + } else { + ret+=SRC[i]; + } + } + return (ret); +} diff --git a/src/common/stringTools.h b/src/common/stringTools.h index 8d6f41766..5790b63b3 100644 --- a/src/common/stringTools.h +++ b/src/common/stringTools.h @@ -50,6 +50,9 @@ namespace kiwix { std::string lcFirst(const std::string &word); void stringReplacement(std::string& str, const std::string& oldStr, const std::string& newStr); + + std::string urlEncode(const std::string &c); + std::string urlDecode(const std::string &c); } #endif diff --git a/static/results.tmpl b/static/results.tmpl index 9a5130e33..81643bd4e 100644 --- a/static/results.tmpl +++ b/static/results.tmpl @@ -115,13 +115,13 @@