Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème -> accents dans les fonctions de chaînes [ Archives ASP & ASP.NET / AU SECOURS !!!! ] (SgtDak)

lundi 5 mai 2003 à 23:04:32 | Problème -> accents dans les fonctions de chaînes

SgtDak

Bien le bonjour, messieurs/dames

Voici un petit problème que j'ai pour coder une page en ASP (VBScript, pas .NET)

Je récupère dans une base de données des titres de films, afin de référencer des commentaires et autres critiques (site de critique de films, donc beaucoup de films...)

Le problème vient bien entendu des accents, car comme chacun le sait, les langages de programmation ne sont pas faits pour nous, pauvres français.

Pour la requête SQL, j'ai finalement trouvé, ayant remarqué que nombreux sont les gens qui cherchent à faire des requêtes "accent-insensitive", voici ma requête SQL :
SELECT num, country, year, originalTitle, translatedTitle, CAST(category AS varchar(255)) AS cat FROM movielist WHERE CAST(translatedTitle AS varchar(255)) COLLATE SQL_Latin1_General_CP437_CI_AI LIKE '%" & strElem & "%' ORDER BY cat;
L'astuce est valable uniquement pour SQL Server (2000 au moins) et réside dans la fonction système "COLLATE" suivie de cette chaîne horrible qui permet une recherche insensible à la casse et insensible aux accents.

Maintenant que ce problème est résolu, je voudrai que ma page de résultat surligne les mots de la recherche dans le texte et pour cela, mon texte est contenu dans une variable et je remplace les mots recherchés par le même mot entourés de balises faisant référence à une feuille de style CSS (enfin bon, c'est pas ca l'important).

Mais, les fonction InStr(str) et Replace(str) me permette seulement deux options, la comparaison binaire sensible à toutes les différences, et la comparaison textuelle qui est insensible à la casse mais sensible aux accents...

Existe-t-il une fonction ou quelque chose me permettant le miracle d'une comparaison plus libre insensible aux accents ? Dois-je la coder à la main ? Et si seule cette solution existe, quelqu'un a-t-il déjà exécuté cette pirouette et me ferait gagner quelques heures (au bas mot) ?

Merci
@+

mercredi 7 mai 2003 à 18:41:58 | Solution personnelle à ceux qui seraient intéressés

SgtDak

Salut,

bon alors il me semble qu'il n'existe aucune solution réellement simple à mon problème, j'ai donc coder une fonction qui résoud mon problème, comme certains pourraient être intéressés, je poste ici mon explication :

Tout d'abord, je vérifie que la chaîne de recherche exacte n'est pas dans le texte.
Si ce n'est pas le cas, je remplace tous les caractères accentués de la chaîne de recherche et du texte en utilisant des variables temporaires. Ainsi, leur longueur ne change pas.
Si je trouve la chaîne non-accentuée dans le texte de base, j'utilise sa position pour remplacer dans mon texte d'origine (avec les accents) les parties correspondantes.

Voici la fonction que j'utilise :
' ==========================================
' Fonction permettant de remplacer des mots dans un texte par ces mots surligné
' strText est le texte dans lequel on cherche ces mots
' arrCrit est un tableau contenant les mots à rechercher
Function strReplaceText(strText, arrCrit)
' Déclaration des variables
Dim strElem
Dim strElem2
Dim strTemp
Dim strTemp2
Dim intPos
' Initialisation des variables
strTemp = strText
' On parcourt le tableau d'éléments
For Each strElem In arrCrit
If InStr(1, strTemp, strElem, vbTextCompare) > 0 Then
strTemp = Replace(strTemp, strElem, "<SPAN STYLE=""{background-color:#FFFF00}"">" _
& Mid(strTemp, InStr(1, strTemp, strElem, vbTextCompare), Len(strElem)) & "</SPAN>", 1, Len(strTemp), vbTextCompare)
Else
strTemp2 = strTemp
strElem2 = strElem
strTemp2 = Replace(strTemp2, "é", "e", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "è", "e", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ê", "e", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ë", "e", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "à", "a", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "â", "a", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ä", "a", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "î", "i", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ï", "i", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ô", "o", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ö", "o", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ù", "u", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "û", "u", 1, Len(strTemp2), vbTextCompare)
strTemp2 = Replace(strTemp2, "ü", "u", 1, Len(strTemp2), vbTextCompare)
strElem2 = Replace(strElem2, "é", "e", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "è", "e", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ê", "e", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ë", "e", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "à", "a", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "â", "a", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ä", "a", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "î", "i", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ï", "i", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ô", "o", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ö", "o", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ù", "u", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "û", "u", 1, Len(strElem2), vbTextCompare)
strElem2 = Replace(strElem2, "ü", "u", 1, Len(strElem2), vbTextCompare)

intPos = InStr(1, strTemp2, strElem2, vbTextCompare)
If intPos > 0 Then
strTemp = Left(strTemp, intPos - 1) & "<SPAN STYLE=""{background-color:#FFFF00}"">" & Mid(strTemp, intPos, Len(strElem)) & "</SPAN>" & Right(strTemp, Len(strTemp) - Len(strElem) - intPos + 1)
End If
End If
Next
strReplaceText = strTemp
End Function
' ==========================================



Cette discussion est classé dans : problème, sql, accents, films, insensible


Répondre à ce message

Sujets en rapport avec ce message

problème SQL [ par fabiin ] Salutvoila ma requet :SELECT * FROM sons WHERE (((MotCle) Like '*a*')) OR (((Titre) Like '*a*')) ORDER BY id DESC;sous MS ACCESS cette requet marche p base de données sql server [ par gnuisnotunix ] hello tout le monde!j'ai un problème qui est le suivant, je suis entrain de faire un moteur de recherche pour mon site en asp, le problème c'est que j problème avec SQL [ par Mellise ] Bonjour,J'aimerai savoir comment utiliser un textbox dans une requette SQL en C#.C super urgentMerci d'avance Probleme majuscule minuscule SQL [ par motoetmotards ] Bonjour !Je dispose d'une base de données (contenant Nom, Prenom...) sur SQL Server.J'ai crée une page ASP consultant cette base depuis Front Page 200 Problème update dans recordset SQL server 2000 [ par bl4ckwolf ] Bonjour, J'ai un formulaire qui modifie un enregistrement dans ma table de client. Voilà quand je clique sur modifier, le script de modification se la pb d'accents [ par amorosalain ] SAMSur une application asp.net/c# administrant une base de données Sql server, certaines informations sont enregistrées dans des fichiers ou exportées problème d'opérateur absent dans une requête sql [ par barb1707 ] Bonjour tout le monde,j'essaye de mettre en place un forum et j'ai un problème d'opérateur lorsque je veux executer ma requête sql.voici le message qu Problème ASP + SQL server [ par kingstyle ] Mon problème est que je veux ecrire ici un nom dans ma table ACTEUR avec le champ nom_acteur. j ai utilisé la syntaxe proposé par le site, je voudrais problème requete SQL insert [ par lenneth666 ] heu voila alors dans une texte box, une personne doi saisir une date (jj/mm/aaaa) et dans une autre texte box, une heure ex : 14:00 et qd je concatèn problème "select" dans SQL access [ par marcbrenner ] Hello tout le monde !Je parcours depuis un certain temps les forums de ce site, mais j'y avais toujours trouvé une réponse...Là, soit j'ai TRES mal ch


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.