0

我已经在网上搜索了几个小时,但我发现似乎没有任何帮助。这在我使用 PHP 5.3 和 MySQL 5.1 时运行良好。当我升级这两个时,我意识到对其中包含 Unicode 字符的字段进行的选择会给出空白结果。

该表设置为 UTF8,特别是字段也设置为 UTF8,以防万一。我的文档的标题区域中有一个 charset=utf-8 。

我在我的论坛上发了两篇测试帖子,一篇是纯文本,另一篇是卷曲引号。然后我创建了一个简单的 PHP 查询来获取这两行。代码的要点是这样的:

<?php

$con = mysql_connect("XXXXX","XXXXX","XXXXX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("XXXXX", $con);


echo "<br />";
echo "<br />";
echo "PHP 5.4.9 having issues displaying UniCode characters. MySQL 5.5.28.3. FastCGI has been removed. IIS.";
echo "<br />";
echo "<br />";


$result1 = mysql_query("SET NAMES 'utf8'");


$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358826");

while($row = mysql_fetch_array($result))
  {
  echo "Post Body without unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }


$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358825");

while($row = mysql_fetch_array($result))
  {
  echo "Post Body with unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }

mysql_close($con);

?>

行为是非 unicode 帖子正确显示。另一个根本不显示。不是它显示一个正方形或块而不是引号 - 它不显示任何东西

我尝试将 mysql_fetch_array 更改为 mysql_fetch_assoc。那没有帮助。我出于沮丧尝试了 utf8_encode ,但这也无济于事。

我读到有些人对 IIS / PHP 5.4.9 / FastCGI 的组合有问题,所以我卸载了 FastCGI。至少我尽了最大努力——文件都不见了,IIS 再次指向 php-cgi.exe 文件。但是 PHP 仍然报告它正在使用 FastCGI。我认为它必须在注册表中看到一些东西?但无论如何,文件都不见了,所以它真的不可能。它没有帮助。

在这一点上,我什至会尝试一些疯狂的想法来让它发挥作用。有什么想法吗?

更新:

我现在已经用 PHP 和 ASP 对此进行了测试。两种语言都给出相同的行为。我的更新代码的结果集给出了以下结果:

没有 unicode 的帖子主题:没有 unicode 的测试帖子

没有 unicode 的帖子正文:测试帖子中只包含普通字符,以及用于测试的 xyzzy。

体场长度:74

使用 unicode 发布主题:使用 unicode 测试帖子

使用 unicode 发布正文:

正文字段长度:0

因此,在检查长度后,ASP 和 PHP 都报告该字段的长度为零。

可能是 ODBC 有问题吗?即使我试图删除它,它是否仍然会干扰 FastCGI?

更新 2 -

为了解决这个问题,我必须做的是从备份中重新加载数据,将数据重新加载到已经设置为 UTF8 的表中,并将字段设置为 UTF8。然后我必须在连接后立即在代码中执行 set names utf8 命令。我认为这里没有涉及 FastCGI - 当我重新安装 FastCGI 时,一切都还可以。我仍然有一些琐碎的问题,但我认为表设置和重新加载处理了我的大部分问题。

丽莎

4

1 回答 1

0

尝试以另一种方式设置 utf8 -

mysql_set_charset('utf8', $con);

取而代之的是——

mysql_query("SET NAMES 'utf8'");

使用方法$con创建的连接在哪里mysql_connect()

注意 - 尝试使用PDOmysqli

于 2012-12-27T03:43:53.077 回答