4

过去几个小时我一直在努力寻找解决方案,但无法做到。我在互联网和这个论坛上尝试了所有可能的解决方案,但似乎没有任何效果。这就是问题所在。

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

要点:

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

表(home)和内容字段(内容)都设置为 utf8_unicode_ci 排序规则,所以这也不是问题。

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

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

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

但是,只要在文本区域中输入阿拉伯数据并发送到 DB 以使用插入查询数据进行存储,数据就会转换为 ????

我在用

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

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

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

图 1:显示的数据是从同一个表中正确检索到的,该表直接通过 phpMyadmin 存储

图 2 当发送到 mysql 数据库到同一个表时显示相同的数据变成 ???

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

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

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

4

3 回答 3

3

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

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

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

用于检索/打印

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

或者如果您不希望这样做,只需更改列排序规则类型“UTF8_GENERAL_CI”

于 2013-01-29T23:08:39.987 回答
2

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

1) 请您确认您已安装多字节扩展。如果你不这样做,那么 PHP 可能无法正确解释来自浏览器的字符。http://php.net/manual/en/book.mbstring.php

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

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

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

header("内容类型: text/html;charset=UTF-8");

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

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

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

即阿拉伯字符对我来说是正确编码的——也许你会看到一些不同的东西。

于 2012-07-30T06:14:43.810 回答
0

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

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

注意这封信N(如在National中)。

谷歌sql N 前缀字符串

于 2012-07-30T07:49:42.613 回答