Salut,
simple précision: \" est un seul caractère, différent de " mais non pas 2 caractères. (faudrait vérifier dans ce cas.... sinon je donne la solution à la fin...)
Un peu comme l'on peut écrire \0 au lieu de 0...
En gros, tu pourrais simplement faire:
ReplaceChar(text[], char1, char2)
{
new i = 0;
while(text[i])//tant qu'on n'atteint pas la fin du texte
{
if(text[i] = char1)
text[i] = char2;
i++;
}
}
Puis dans ton OnPlayerText:
public OnPlayerText(playerid, text[])
{
new text2[128];//la bonne taille hein^^
new query[300];
new name[MAX_PLAYER_NAME];//UTILISE LES CONSTANTES!!!!
GetPlayerName(playerid, name, sizeof(name));
//text2 = text; -> à noter que ce n'est pas valide....
format(text2, sizeof(text2), "%s", text);
ReplaceChar(text2, '"', '\"');
format(query,sizeof(query),"INSERT INTO `chat` (Message, pseudo) VALUES (\"%s\", \"%s\")",text2,name);
mysql_query(query,connection);
return 1;
}
Il faut vérifier que ça peut fonctionner ainsi, sinon il faut simplement modifier légèrement la fonction pour ReplaceSubString:
ReplaceSubString(text[], sujet[], remplacement[], bool:ignorecase = false)
{
new tmpText[256];//malheureux, mais pour la taille faudra jouer...
new opos = 0, npos = 0;
new sujet_len = strlen(sujet);
new tmp = 0;
new i = strfind(text, sujet, ignorecase);
while(i >= 0 && text[i])
{
tmp = strcpy(text[opos], tmpText[npos], i - opos);
opos += tmp;
npos += tmp;
tmp = strcpy(tmpText[npos], remplacement);
npos += tmp;
/* tmp = 0;
while(opos < i)
{
tmpText[npos] = text[opos];
opos++;
npos++;
}
while(sub2[tmp])
{
tmpText[npos] = remplacement[tmp];
npos++;
tmp++;
}*/
opos += sujet_len;//on continue à chercher après le sujet trouvé...
i = strfind(text, sujet, ignorecase, opos);//recherche du sujet
}
format(text, sizeof(tmpText), tmpText);//on recopie le texte...
}
strcpy(source[], dest[], len = -1)//ptet trouver mieux comme valeur par défaut...genre 4096
{
new i = 0;
if(len == -1)
len = strlen(source);
while((source[i] = dest[i]) && i < len)
i++;
return i;
}
si vous ne voulez pas utiliser le strcpy ajouté, vous pouvez utiliser la partie en commentaire au lieu de la première partie de la boucle.
Il faut bien sur s'assurer que la chaine de caractère passée en paramètre est suffisamment longue ainsi que celle temporaire dans la fonction...
À noter que l'on pourrait inverser pour travailler sur la chaine passée en paramètre plutôt que la temporaire...
++Sim++