How to better search: replacing %20 with +
I don't know what you mean by &quot;better search&quot;, as the search works as-is. However, I think the reason it works this way is because drupal_goto() eventually calls drupal_http_build_query(), which calls rawurlencode(). Drupal uses this for URL query parameters. The docs for the function say it returns:

a string in which all non-alphanumeric characters except -_. have been replaced with a percent (%) sign followed by two hex digits. This is the encoding described in RFC 1738 for protecting literal characters from being interpreted as special URL delimiters, and for protecting URLs from being mangled by transmission media with character conversions (like some email systems).

https://php.net/manual/en/function.rawurlencode.php
RFC 1738: https://tools.ietf.org/html/rfc1738
To change this, you could create your own module or function that does not does escape :. If you use an exposed view search form, it should already encode spaces as +.