无法使用PHP在MYSQL数据库中存储阿拉伯语

时间:2012-07-29 05:08:55

标签: php mysql arabic

我一直试图找到过去几个小时的解决方案,但无法这样做。我已经尝试了互联网和本论坛上的每一个可能的解决方案,但似乎没有任何工作。这是问题所在。

我想存储用户将在mysql数据库中的表单的textarea中键入或粘贴的阿拉伯语数据。该网站是阿拉伯语,形式只包含这一个textarea。

重点:

网站正确显示静态阿拉伯语内容。整个网站都使用utf8字符集。所以这不是问题。

表(主页)和内容字段(内容)都设置为utf8_unicode_ci排序规则,因此它也不是问题。

表单设置为accept-charset ='utf-8',这也不是问题。

当我在表格中使用phpMyAdmin插入阿拉伯语文本时,我完全没有任何问题。

事实上,当在网站上检索到表格中的阿拉伯语文本(通过phpMyAdmin输入)时,它会完美显示。

但是一旦阿拉伯数据输入文本区域并发送到DB就可以使用插入查询数据转换成????

我正在使用

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

连接后,这根本不是问题。正如我之前所说,数据可以检索到。我上传了两张图片。证明我的问题。

我真的被困在这里,你可以看到我已经采取了所有可能的步骤来解决这个问题,但这种行为真的很奇怪。请帮忙。

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 ???

我用来将数据插入db的代码是:

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

您可以看到第二个echo语句。我添加它来调试问题。数据在此回声中完美显示。我认为问题在问题上出现了。

3 个答案:

答案 0 :(得分:3)

我没有尝试使用阿拉伯语,但我在上一个项目网站上尝试了我的代码, 该网站提供多种语言版本。你可以添加php函数urlencode来保存数据库中的内容,并使用urldecode函数检索数据内容。

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

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

for retrieve / print

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

或者如果你不想这只是改变列整理类型“UTF8_GENERAL_CI”

答案 1 :(得分:2)

看起来服务器端的所有代码都正常工作。当浏览器将表单提交回服务器然后数据错误或被错误解释时,似乎发生了错误。

1)请确认您已安装Multi-Byte扩展程序。如果不这样做,则PHP可能无法正确解释浏览器中的字符。 http://php.net/manual/en/book.mbstring.php

2)您能否仔细检查该页面是否被浏览器实际选为UTF8。浏览器可能不确定页面所在的字符集,但仍然正确显示阿拉伯字符,因为它正在猜测如何显示它们。首先。

在您的HTML中,添加以下元标记:

还要在脚本顶部添加此PHP标头:

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

3)如果这些不起作用,请您在浏览器中查看实际的表单提交,使用Chrome中的开发人员工具或Firefox中的Firebug来查看提交的确切内容。

e.g。我刚做了一个测试页面,将一些阿拉伯语文本提交到我服务器上的测试页面。在请求中,我可以看到表单编码为

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

将文本拆分为单个字符,我可以看到

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

即。阿拉伯字符正在为我编码 - 也许你会看到不同的东西。

答案 2 :(得分:0)

由于您的数据是unicode,请使用以下查询:

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

注意字母N(如 National )。

Google sql N prefix strings