14

I Have a form with one textbox called(ProductTitle)

if I write as example "Étuit" in the textbox and click on Save, I post the data in a table called Product. The result int the database for ProductTitle is Étuit. My concern is about the Special character. Instead of putting É in the database , I got that É

When I Load the Product Title ("Étuit") from the database into a span. That show correctly.
BUT When I load it inside a Textbox to Edit the Product Title, that show Étuit.

Anybody know why.

I Put that in the html head

<head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Note : When I Click save on the form, the data is posted with jquery ajax method.

3
  • What is your database's collation? Commented Aug 16, 2011 at 3:40
  • 1
    it's utf8_general_ci on both database and table Commented Aug 16, 2011 at 3:44
  • @Jean-Francois There's nothing "special" about the character "É". Also, please review the currently accepted answer. It is wrong. Commented Aug 16, 2011 at 5:06

8 Answers 8

12

Try seting the client encoding before using the DB.

mysql_query("SET NAMES 'utf8'");

If the above doesn't work use the utf8 encode/decode functions:

<?
$string ="Étuit";
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<?
echo $string; // echo's '?tuit'
echo utf8_encode($string); // echo's 'Étuit'
?>
Sign up to request clarification or add additional context in comments.

8 Comments

Either or. If you set everything to UTF-8, there's no need for utf8_encode. Do you know what this function actually does?
deceze : it encodes a string to utf8. Nice picture you've on your profile ;)
But the string is already encoded in UTF-8, at least it's supposed to be! While you're on my profile, please click through to the long ranty article I wrote about encodings, which goes through this in more detail.
@deceze you're taking this function way too personally and come across as a douche with all the righteous downvoting.
For starters, stop being so condescending. Instead of "...do you know what this function actually does?" you could say "According to the PHP docs, the function actually...and you you can replicate that behavior like..."
|
10

Take a look at utf8_encode() and utf8_decode(). Also take a look at multibyte string functions.

5 Comments

Sorry, but unless you can explain what utf8_encode actually does and why this would be better than @gview's solution, I'll have to give you a -1.
Try saving the text "エンコード" into your UTF-8 database (which should be able to handle it, right?) using utf8_encode/utf8_decode and tell me if it's still working.
I don't need these character. I Only need French character like éè .
@Jean-Francois Maybe, but using this solution you're either storing garbage in the database or are replacing any characters that are not part of the latin-1 encoding with question marks, depending on whether you first utf8_encode then decode or vice versa. Maybe that doesn't bother you now because you just happen to only be using latin-1 encodable characters, but a) you're not handling UTF-8 correctly by doing so and b) it may come back to bite you one day. To handle UTF-8 correctly, set your database connection to UTF-8 as explained by @gview.
Thanks deceze, I configured my database correctly. You absolutely right. Do thing properly paid one day :)
9

Probably what is happening is that the default character set for the client is not set to UTF-8, so you're getting tranposition in one direction or the other. This is covered in a number of different ways here:

Often an initialization query of "SET NAMES utf8" just after the connection is instantiated will solve the issue going forward but make sure that what you think is stored (utf8) is actually what was stored. You might have a cleanup job if not.

3 Comments

The problem here, is all the answer work really good, it's hard to find who got the best answer. I Use Doctrine , and it's not necessary to apply Set Name on mysql_query. Thanks for your help too
Jean-Francois, you might want to go back and edit your question to indicate that Doctrine was involved. It would have been helpful information. Are you configuring your connection using $manager->setCharset('utf8'); It would be good to know how this was ultimately handled for future reference.
As the guide in @gview's link suggests, setting the html form attribute "<form accept-charset="utf-8">" solved the OP's issue for me.
0

Not to bother with SET NAMES before every connection in the code, a parameter in mysql connection string can be used:

"jdbc:mysql://hostAddress:port/databaseName?characterEncoding=UTF-8"

Comments

0

This post explains how to configure and work with UTF-8 in PHP and MySQL. Hope that saves your time.

A UTF-8 Primer for PHP and MySQL

Comments

0

These work for me:

In the HTML headers:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

After the PHP connection:

$conexion = @mysql_connect($servidor, $usuario, $contrasenha);
mysql_select_db($BD, $conexion) or die(mysql_error($conexion));
mysql_query("SET NAMES 'utf8'");

Comments

0

I just use set_charset method when i'm using mysqli lib.

error_reporting(E_ALL);

$mysqli = new mysqli('localhost', 'login', "pass", 'database');

if ( ! $mysqli->set_charset("utf8") )
{
   printf("Error loading character set utf8: %s\n", $mysqli->error);
}

Comments

0

I also had difficulties with this, but the following always works for me ! Before manipulating your data, make sure to set the encoding as follows:

try{
  $dbh = new PDO($dsn, $user, $pass);
  $dbh->query("SET NAMES 'utf8'");
  print "Connected";
 }

catch(PDOException $e){
  print "Error!!   " . $e->getMessage()."<br/>";
  die();
 }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.