Index: khtml/khtml_ext.cpp =================================================================== --- khtml/khtml_ext.cpp (Revision 579135) +++ khtml/khtml_ext.cpp (Revision 579136) @@ -38,6 +38,7 @@ #include <qclipboard.h> #include <qfileinfo.h> #include <qpopupmenu.h> +#include <qurl.h> #include <qmetaobject.h> #include <private/qucomextra_p.h> #include <qdragobject.h> @@ -273,7 +274,9 @@ if( !KURIFilter::self()->filterURI(data, list) ) { KDesktopFile file("searchproviders/google.desktop", true, "services"); - data.setData(file.readEntry("Query").replace("\\{@}", m_part->selectedText())); + QString encodedSearchTerm = m_part->selectedText(); + QUrl::encode(encodedSearchTerm); + data.setData(file.readEntry("Query").replace("\\{@}", encodedSearchTerm)); } KParts::URLArgs args; @@ -441,6 +444,7 @@ // search text QString selectedText = khtml->selectedText(); + selectedText.replace("&", "&&"); if ( selectedText.length()>18 ) { selectedText.truncate(15); selectedText+="..."; Index: khtml/khtml_ext.cpp =================================================================== --- khtml/khtml_ext.cpp (Revision 583922) +++ khtml/khtml_ext.cpp (Revision 583923) @@ -476,7 +476,8 @@ name = "Google"; } - new KAction( i18n( "Search '%1' at %2" ).arg( selectedText ).arg( name ), icon, 0, d->m_khtml->browserExtension(), + // using .arg(foo, bar) instead of .arg(foo).arg(bar), as foo can contain %x + new KAction( i18n( "Search '%1' at %2" ).arg( selectedText, name ), icon, 0, d->m_khtml->browserExtension(), SLOT( searchProvider() ), actionCollection(), "searchProvider" ); // favorite search providers