Bonjour
je bloque sur une règle de réécriture et d'encodage dans un script ajax / php pour un petit moteur de recherche
J'ai une règle de réécriture pour mon site :
J'envoie les données de mon formulaire de recherche via une requête ajax. J'encode le contenu de ma recherche dans un encodeURIComponent
et je récupère le tout dans un script php, je teste, cherche dans ma bdd et renvoie un résultat à afficher dans une div. A mon niveau c'est déjà un exploit, mais je rencontre un problème que je n'arrive pas à résoudre. A la base en javascript je "nettoie" (comme je peux) ma recherche en virant un maximum de caractère qui posait problème (je faisais la recherche pour un annuaire, donc que des noms / prénoms pas de caractères spéciaux), j'ai bien les espaces qui s'affichent avec les %20 et ça fonctionne. Mais par exemple si je mets un ? qui devient %3F, alors la règle mal faite de mon RewriteRule me renvoie direct sur une erreur 403 (je présume que c'est mon htaccess qui met le bazarre)...
Comment fait-on dans cette règle pour laisser les réencodage des caractères spéciaux passer vers mon script php ?
Merci
je bloque sur une règle de réécriture et d'encodage dans un script ajax / php pour un petit moteur de recherche
J'ai une règle de réécriture pour mon site :
RewriteEngine on
RewriteRule ([a-zA-Z0-9\-]+)_([0-9]+)\.html index.php?page=$1&id=$2 [N]
RewriteRule ([a-zA-Z0-9\-]+)_([a-zA-Z0-9&îïùéè@.\s|%20\-]+)\.html index.php?page=$1&search=$2 [N]
RewriteRule ([a-zA-Z0-9\-]+)\.html index.php?page=$1 [L]
J'envoie les données de mon formulaire de recherche via une requête ajax. J'encode le contenu de ma recherche dans un encodeURIComponent
function search_article(article) {
let article_clean = article.replace(/[`²!#$%^&*()_|+\=;'",<>£µ§\{\}\[\]\\\/]/gi, '');
if (article_clean !== article) {
document.getElementById('search-bar').value = article_clean;
} else {
let result_article = document.getElementById('result_article');
if (article.length === 0 || article === ' ') {
result_article.innerHTML = '';
} else {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
result = xhr.responseText;
console.log(result);
result_article.innerHTML = xhr.responseText;
}
};
console.log(encodeURIComponent(article));
xhr.open('GET', 'recherche-article_' + encodeURIComponent(article) + '.html');
xhr.send();
}
et je récupère le tout dans un script php, je teste, cherche dans ma bdd et renvoie un résultat à afficher dans une div. A mon niveau c'est déjà un exploit, mais je rencontre un problème que je n'arrive pas à résoudre. A la base en javascript je "nettoie" (comme je peux) ma recherche en virant un maximum de caractère qui posait problème (je faisais la recherche pour un annuaire, donc que des noms / prénoms pas de caractères spéciaux), j'ai bien les espaces qui s'affichent avec les %20 et ça fonctionne. Mais par exemple si je mets un ? qui devient %3F, alors la règle mal faite de mon RewriteRule me renvoie direct sur une erreur 403 (je présume que c'est mon htaccess qui met le bazarre)...
Comment fait-on dans cette règle pour laisser les réencodage des caractères spéciaux passer vers mon script php ?
Merci