Try this. It’s a function that will filter the search query and replace any smart quotes with their “dumb” equivalent.
<?php
/**
* Filter smart quotes out of a search query.
* Replace them with "dumb" quotes.
*
* @param WP_Query $query Instance of WP_Query.
*/
function filter_search_smart_quotes( $query ) {
if ( $query->is_search() ) {
$search = $query->get( 's' );
$smart_quotes = array(
chr( 145 ),
chr( 146 ),
chr( 147 ),
chr( 148 ),
chr( 151 ),
);
$dumb_quotes = array(
"'",
"'",
'"',
'"',
'-',
);
$search = str_replace( $smart_quotes, $dumb_quotes, $search );
$query->set( 's', $search );
}
}
add_action( 'pre_get_posts', 'filter_search_smart_quotes' );