2

我正在尝试使用以下连接字符串从 JDE 数据库中获取我们的阿拉伯语值:

$dsn = "Driver={SQL Server};Server=10.10.10.27;Database=JDE;charset=utf8";
$username = "username"; 
$password = "password";
$string = "odbc:".$dsn.";Uid=".$username.";Pwd=".$password.";";
$con = new PDO($string);

如您所见,我指定了charset=utf8

我也有我的 HTML 元数据:

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

我之前也使用过从 MySQL 获取的阿拉伯字符,它显示正确,我可以看到阿拉伯字符,但是从 JDE 数据库中我得到以下信息:

姓名: ??????????????????????????????

我尝试在我的 php 代码中添加以下内容,尝试不同的输出:

echo iconv('windows-1256', 'utf-8', $DataFromJDE); 
echo utf8_decode($DataFromJDE);
echo utf8_encode($DataFromJDE);

但都失败了。

我需要在服务器上进行配置吗?

我在 Windows 服务器上使用 Apache 和 PHP 7。

JDE 位于单独的服务器中。

我错过了什么?它来自 PHP 还是 JDE?

4

2 回答 2

0

是的!终于破解密码了!非常感谢您的精彩解释和澄清。你的回答很有帮助。

所以基本上我要做的就是。

  1. 将我的查询更改为以下

    $con->prepare('SELECT CAST( CAST(JDEColumn AS VARBINARY(MAX)) AS varchar(120)) AS JDEColumn FROM TABLE where COLUMN = :SELECTION');

此处由该线程提供https://stackoverflow.com/a/29975739/11835221

  1. 使用 iconv() 如下:

    iconv('UTF-16LE', 'utf-8', $DataFromJDE);

通过逆向工程从这个答案中得到了线索https://stackoverflow.com/a/51130953/11835221

瞧!我得到了我的阿拉伯语数据!

希望有一天这能帮助另一个拉动灵魂的头发。

干杯!

于 2021-02-28T14:24:00.387 回答
0

尝试类似:

echo $DataFromJDE . '<br>';

请注意,您不需要使用utf8_decode(...)或任何类似的浏览器支持UTF-8,无需重新格式化。

于 2021-02-28T11:29:14.440 回答