@@ -17,10 +17,10 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
18from flask_babel import gettext
18from flask_babel import gettext
20−from searx.url_utils import urlunparse
20+from searx.url_utils import urlunparse, parse_qsl, urlencode
22−regexes = {re.compile(r'utm_[^&]+&?'),
22+regexes = {re.compile(r'utm_[^&]+'),
23− re.compile(r'(wkey|wemail)[^&]+&?'),
23+ re.compile(r'(wkey|wemail)[^&]*'),
24 re.compile(r'&$')}
24 re.compile(r'&$')}
26name = gettext('Tracker URL remover')
26name = gettext('Tracker URL remover')
@@ -34,12 +34,18 @@ def on_result(request, search, result):
35 if query == "":
35 if query == "":
36 return True
36 return True
37−
37+ parsed_query = parse_qsl(query)
40+ for i,(param_name,_) in enumerate(list(parsed_query)):
38− for reg in regexes:
41+ for reg in regexes:
39− query = reg.sub('', query)
42+ if reg.match(param_name):
40−
43+ parsed_query.pop(i)
41− if query != result['parsed_url'].query:
44+ changed = True
42− result['parsed_url'] = result['parsed_url']._replace(query=query)
48+ result['parsed_url'] = result['parsed_url']._replace(query=urlencode(parsed_query))
43− result['url'] = urlunparse(result['parsed_url'])
49+ result['url'] = urlunparse(result['parsed_url'])
45 return True
51 return True