|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Hello,
I have a website that is supposed to grab a French word, and return the English translation. The front-end has an AJAX script, that dynamically POST's the value to the backend: function post() { var string = document.getElementById("string").value; var poststr = "string=" + encodeURI( string ); makePOSTRequest('dict.eng.php', poststr); } Then the backend takes the script, and queries a database for 30 words most like that word: $query = "SELECT * FROM dictionary WHERE fr like ('" . $string . "%') ORDER BY fr LIMIT 30"; $query = mysql_query($query); If I enter in a word like "bonjour", the script returns the words that are most like bonjour. A word with a special character, like "français", will return no values, even though it is in the dictionary. The page is in UTF-8, and the database, tables, and fields are all utf8_bin. Can anyone please point me in the right direction? Matt |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Matthew White schrieb:
> "Markus" <derernst@NO#SP#AMgmx.ch> wrote in message > news:469db6f9$1_1@news.cybercity.ch... >> Matthew White schrieb: >> >>> "Rik" <luiheidsgoeroe@hotmail.com> wrote in message >>> news p.tvmvq3jkqnv3q9@metallium...>>>> On Tue, 17 Jul 2007 20:31:56 +0200, Matthew White <mgw854@msn.com> >>>> wrote: >>>> >>>>> I added that query right after calling the database, and it now >>>>> works fine, >>>>> but here is a problem- "français" returns three matches: >>>>> français >>>>> française >>>>> françaises >>>>> >>>>> Why is "ç" being substituted for "ç", even when I pass each >>>>> returned string >>>>> through htmlentities()? [...] >> It looks like your string is in UTF-8 encoding, but the output is >> converted to Latin-1 or whatever. Check the following points: >> >> 1. All scripts (PHP, HTML) are in UTF-8 encoding >> >> 2. Send UTF-8 header to the browser: >> header('Content-Type: text/html; charset=UTF-8'); >> >> 3. Set also the appropriate Meta tag in the HTML source (should not be >> necessary if correct header is sent, but you never know about browsers): >> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> [...] > > I had already made sure of the first and last, but I did add the > header() to my PHP file. It has made no difference in the output. Hum... if you don't find the solution in the links posted by Good Man, you could try to add ini_set('default_charset', 'utf-8'); to your PHP script (somewhere at the top); but I also think it is rather a MySQL issue now. BTW, which MySQL version do you use? One possible reason is that the db contents, that existed before you added mysql_query("SET NAMES 'utf8'"), are now returned distorted, as you entered them without telling the DB they are UTF-8, so "ç" was stored as "ç", which will now be returned in proper UTF-8 encoding. To test this, make the same test with data you entered after you added the "SET NAMES" query. Anyway, if this is the case, it is likely that your original problem re-arises with all data entered with proper SET NAMES setting! |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Matthew White skrev:
> I added that query right after calling the database, and it now works fine, > but here is a problem- "français" returns three matches: > français > française > françaises > > Why is "ç" being substituted for "ç", even when I pass each returned > string > through htmlentities()? Htmlentities will interpret what comes from the database as iso-8859-1, while it is in fact utf-8. Either use htmlentities($myvar, ENT_QUOTES, 'utf-8') or htmlspecialchars($myvar) I recommend the second option - if your output is utf-8, you should hardly ever need htmlentities. Nis |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
"Matthew White" <mgw854@msn.com> wrote in message
news:CsRmi.2399$s25.1211@trndny04... > Hello, > I have a website that is supposed to grab a French word, and return the > English translation. The front-end has an AJAX script, that dynamically > POST's the value to the backend: > > function post() { > var string = document.getElementById("string").value; > var poststr = "string=" + encodeURI( string ); > makePOSTRequest('dict.eng.php', poststr); > } > > Then the backend takes the script, and queries a database for 30 words > most like that word: > > $query = "SELECT * FROM dictionary WHERE fr like ('" . $string . "%') > ORDER BY fr LIMIT 30"; > $query = mysql_query($query); > > If I enter in a word like "bonjour", the script returns the words that are > most like bonjour. A word with a special character, like "français", will > return no values, even though it is in the dictionary. The page is in > UTF-8, and the database, tables, and fields are all utf8_bin. Can anyone > please point me in the right direction? > > Matt Retracing my steps, I opened up the MySQL database, only to find those values were corrupted. After adding in mysql_query("SET NAMES 'utf8'") to the script that parses the dictionary file, I was able to make everything work well. Thanks for everyone's ! Matt |
|
![]() |
| Outils de la discussion | |
|
|