Solved

Arabic charset working with PHP and mySQL

Posted on 2008-06-19
6
2,992 Views
Last Modified: 2012-05-05
Hi all,
Exact issue is failing to insert Arabic data into mySQL using PHP application.  Result appear as question marks ???????

1. The same code works fine on my local server.
2. The same mySQL query works fine using myPHPAdmin given by the hosting company.
3. Reading Arabic data from mySQL works perfect.

PHP code used to insert the data:


<?php

    session_start();

    require "Utils.php";

    $isloggedin = isset($_SESSION["isloggedin"]) && $_SESSION["isloggedin"];

    $user = false;

    $passord = false;

    if($isloggedin) {

        // TODO change to session vars

        $user = "*********";

        $passord = "*********";

    } else {

        $user = "********";

        $passord = "********";

    }

    $con = mysql_connect("database name",$user,$password);

    if (!$con) {

        // TODO redirect to error page

        die('Could not connect: ' . mysql_error());

        exit;

    }

    

    // building the sql columns

    $sql_columns["event_type"] = $_POST["ddl_event_type"]; // int value

    $sql_columns["description"] = "'"  . $_POST["txtbox_description"] . "'";

    $sql_columns["event_days"] = "'" . $_POST["txtbox_days"] . "'";

    $sql_columns["event_time"] = "'" . $_POST["txt_time"] . "'";

    $sql_columns["event_location"] = "'" . $_POST["txt_location"] . "'";

    $sql_columns["event_map_url"] = "'" . $_POST["txt_map_url"] . "'";

    $sql_columns["event_details_url"] = "'" . $_POST["txt_details_url"] . "'";

    $sql_columns["added_by"] = "'" . $_POST["txt_owner"] . "'";

    $now = date("Y-m-d H:i:s");

    $sql_columns["added_date"] = "'" . $now . "'";

    if($isloggedin) {

        $sql_columns["accepted_date"] = "'" . $now . "'";

        $sql_columns["accepted"] = "1"; // boolean

        $sql_columns["expiration_date"] = "'" . $_POST["txt_exp_date"] . "'";

    }

    mysql_query("SET NAMES 'utf8'");

    mysql_query('SET CHARACTER SET utf8'); 

    mysql_query("SET character_set_results='utf8'");

    mysql_select_db("burair_munasabat", $con);

    

    $query = "INSERT INTO munasabat_table (";

    foreach($sql_columns as $colName => $colValue) {

        $query .= $colName . ",";

    }

    // remove last comma

    $query = substr($query, 0, strlen($query) - 1);

    $query .= ") VALUES(";

    foreach($sql_columns as $colName => $colValue) {

        $query .= iconv("windows-1256", "utf-8", $colValue) . ",";

    }

    // remove last comma

    $query = substr($query, 0, strlen($query) - 1);

    $query .= ")";

    echo $query;

    mysql_query($query);

    if(mysql_error()) {

        echo mysql_error();

    }

    mysql_close($con);

?>
 

<html dir="rtl">

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

    <head>

    </head>

<body> Submitted </body>

</html>

Open in new window

0
Comment
Question by:The14follower
6 Comments
 
LVL 9

Expert Comment

by:Rurne
ID: 21824707
Sounds like your table collation's off.  What you need is iso-8859-6 character set support.  What MySQL actually includes is cp1256, which is called 'Windows Arabic.'  It should work okay with the following update to your database:

ALTER DATABASE `database name` DEFAULT CHARACTER SET = cp1256;
ALTER DATABASE  `database name` DEFAULT COLLATION = cp1256_general_ci;
0
 
LVL 1

Expert Comment

by:webjema
ID: 21829260
Are your database, tables and fields UTF-8?
0
 

Author Comment

by:The14follower
ID: 21831740
Rurne,
Your suggestion didn't work.  Again it works only on my local machine but not on the hosting server.

webjema,
Yes, all using utf-8.
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 1

Expert Comment

by:webjema
ID: 21833134
try remove convention
iconv("windows-1256", "utf-8", $colValue)
your data have been already utf-8!
0
 

Accepted Solution

by:
The14follower earned 0 total points
ID: 21833258
Thanks all,

I added these two lines and got it working:

mysql_query("SET character_set_connection='utf8'");
mysql_query("SET collation_connection='utf8_general_ci'");
0
 

Expert Comment

by:lowee81
ID: 22013355
I've faced the same problem
you can solve it by change it to utf-8 even in the html files

and even when you enter the Arabic words they will be stored exactly and all the words can be modified in all operating systems not only windows
0

Featured Post

Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
Learn how to set-up PayPal payment integration in your Wufoo form. Allow your users to remit payment through PayPal upon completion of your online form. This is helpful for collecting membership payments, customer payments, donations, and more.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now