Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have been trying to find a solution for past few hours but unable to do so. I have tried each and every possible solution on the Internet and this forum but nothing seems to be working. Here is the problem .

I want to store arabic data that user will type or paste in the textarea of form in mysql database. The website is arabic and form only contains this one textarea.

Important Points:

The website is displaying static arabic content correctly. utf8 charset is used throughout the website. So it is not a problem.

The table (home ) and the content field(content) are both set to utf8_unicode_ci collation so it is not a problem either.

Form is set to accept-charset='utf-8' so that's not a problem either.

When I insert arabic text using phpMyAdmin in the table I don't have any problem at all with it.

In fact when arabic text (entered through phpMyAdmin) in the table is retrieved on the website it shows perfectly.

But as soon as arabic data is entered in text area and sent to DB to be stored using insert query data transforms into ????

I am using

mysql_query("SET NAMES 'utf8'"); 
mysql_query('SET CHARACTER SET utf8');

After Connection so it is not a problem at all. As I said earlier the data is retrieved all right. I have uploaded the two images. Demonstrating my problem.

I am really stuck here and as you can see I have taken all the steps possible to solve this as well but this behavior is really weird. Please help.

Image 1: Showing data is retrieved from same table properly which was stored directly thru phpMyadmin

Image 2 Showing the same data when sent to mysql databse into same table turns into ???

The code I am using to insert the data into db is:

 $content=$_POST["content"];
echo $content;
$sql="update home set content='$content'";
$result=mysql_query($sql) or die(mysql_error());

You can see the second echo statement. I added it to debug the problem. Data is shown perfectly in this echo. The problem rises in the query I suppose.

share|improve this question
4  
You might want to include the code you're using to take the data from your POST request and insert it into the DB. –  Amber Jul 29 '12 at 5:10
1  
Try adding accept-charset attribute to your form: <form accept-charset="utf-8" ....> –  Akhilesh B Chandran Jul 29 '12 at 5:27
 
@AkhileshBChandran Please read the thread I have already added the form charset attribute. And besides the form is displaying the data in arabic perfectly from the DB. The problem occurs when I try to store the data. –  Ahmar Ali Jul 29 '12 at 5:41
 
@Amber I have added the code to thread. Please check. –  Ahmar Ali Jul 29 '12 at 5:44
 
@Ali: Oh! sorry, i didn't saw that you've mentioned it. –  Akhilesh B Chandran Jul 29 '12 at 5:54
show 4 more comments

3 Answers

up vote 1 down vote accepted

It looks like all the code on the server side is working properly. The error seems to be happening when the browser submits the form back the server and then either the data is wrong or is mis-interpreted.

1) Please can you confirm that you have the Multi-Byte extension installed. If you don't then PHP will probably be failing to interpret the characters from the browser correctly. http://php.net/manual/en/book.mbstring.php

2) Can you double-check that the page is actually picked up as UTF8 by the browser. It is possible that the browser isn't sure what character set the page is in, but is still displaying the Arabic characters correctly because it's guessing how to display them. So first.

In your HTML, add this meta tag:

Also add this PHP header at top of the script:

header("Content-Type: text/html;charset=UTF-8");

3) If those don't work please can you look at the actual form submission in the browser, either using the developer tools in Chrome or Firebug in Firefox to see exactly what is being submitted.

e.g. I just did a test page to submit some Arabic text to a test page on my server. In the request I can see the form is encoded as

Content-Length: 61
test=%26%231607%3B%26%231594%3B%26%231594%3B%26%231601%3B&go=

Splitting the text into individual characters I can see

%26
%231607
%3B
%26
%231594
%3B
%26
%231594
%3B%26
%231601
%3B

i.e. the Arabic characters are being encoded correctly for me - perhaps you would see something different.

share|improve this answer
add comment

i wasn't try in Arabic language but i was tried my code in my last project site, the site was available in multi languages. you may just add php function urlencode for save content in database and for retrieving data content use urldecode function.

$content=urlencode($_POST["content"]);

echo $content;
$sql="update home set content='$content'";

for retrieve/print

echo urldecode($data['content']);

or if you don't want this just change column collation type "UTF8_GENERAL_CI"

share|improve this answer
add comment

Since your data is unicode, use this query:

$sql="update home set content=N'$content'";

Notice the letter N (as in National).

Google sql N prefix strings.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.