获取阿拉伯字符为???在来自 JDE 的 PHP 中

问题描述

我正在尝试使用以下连接字符串从 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?

解决方法

尝试类似:

SELECT 
AVG(qty_IN) avg_art_IN,MAX(qty_IN) max_art_IN,MIN(qty_IN) min_art_IN,AVG(qty_OUT) avg_art_OUT,MAX(qty_OUT) max_art_OUT,MIN(qty_OUT) min_art_OUT
FROM 
(SELECT
ticketId,SUM(IIF(articleType='IN',1,0)) qty_IN,SUM(IIF(articleType='OUT',0)) qty_OUT
FROM tickets.articles
GROUP BY ticketId
) AS t

注意您不需要使用 echo $DataFromJDE . '<br>'; 或任何类似的东西,浏览器支持 utf8_decode(...),无需重新格式化。

,

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

所以基本上我必须做的是。

  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

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

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

干杯!