web-dev-qa-db-fra.com

add_rewrite_rule ne fonctionne pas pour les caractères spécifiques à la langue

Ma requête de recherche par défaut:

example.com/search/?search_text=keyword

Ce que je veux le transformer:

example.com/search/keyword

J'ai donc ajouté ceci à mon function.php

add_rewrite_rule('^search/([^/]*)?','index.php?pagename=search&search_text=$matches[1]','top');

Fonctionne bien pour l’alphabet anglais, mais chaque fois que je cherche un mot clé dans ma langue, comme ceci:

example.com/search/kırmızı

Le titre de la page devient: k%C4%B1rm%C4%B1z%C4%B1 et aucun résultat n'est renvoyé.

Faites-moi savoir si vous avez besoin de plus de détails.

2
HOY

Ceci est dû à l'encodage. Je suppose que votre page de recherche contient une fonction que vous obtenez et que vous utilisez search_text dans ce modèle. Vous devez décoder l'URL avant de le faire.

La fonction urldecode() correspond à ce que vous recherchez. Votre chaîne est également encodée en UTF-8, voici donc ce dont vous aurez besoin:

$string = utf8_decode( urldecode( $_GET['search_text'] ) );

Vous pouvez maintenant utiliser la chaîne décodée dans votre recherche.

2
Jack Johansson