38fb5103beda4b0f705574c541b290b8b253e670
chmalee
  Mon Sep 22 12:23:38 2025 -0700
Remove 0-length characters from search strings, refs #36387

diff --git src/hg/js/hgSearch.js src/hg/js/hgSearch.js
index a30cd67b13a..19558363f3d 100644
--- src/hg/js/hgSearch.js
+++ src/hg/js/hgSearch.js
@@ -740,30 +740,31 @@
             updateStateAndPage(jsonData, true);
         }
         $("#spinner").remove();
     }
 
     function handleErrorState(jqXHR, textStatus) {
         cart.defaultErrorCallback(jqXHR, textStatus);
         $("#spinner").remove();
     }
 
     function sendUserSearch() {
         // User has clicked the search button, if they also entered a search
         // term, fire off a search
         cart.debug(debugCartJson);
         var searchTerm = $("#searchBarSearchString").val().replaceAll("\"","");
+        searchTerm = searchTerm.replace(/[\u200b-\u200d\u2060\uFEFF]/g,''); // remove 0-width chars
         if (typeof searchTerm !== 'undefined' && searchTerm.length > 0) {
             // put up a loading image
             $("#searchBarSearchButton").after("<i id='spinner' class='fa fa-spinner fa-spin'></i>");
 
             // redirect to hgBlat if the input looks like a DNA sequence
             // minimum length=19 so we do not accidentally redirect to hgBlat for a gene identifier
             // like ATG5
             var dnaRe = new RegExp("^(>[^\n\r ]+[\n\r ]+)?(\\s*[actgnACTGN \n\r]{19,}\\s*)$");
             if (dnaRe.test(searchTerm)) {
                 var blatUrl = "hgBlat?type=BLAT%27s+guess&userSeq="+searchTerm;
                 window.location.href = blatUrl;
                 return false;
             }
 
             // if the user entered a plain position string like chr1:blah-blah, just