问题描述
我正在尝试使用以下连接字符串从 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 数据库中我得到以下内容:
姓名:??? ??? ??? ??? ??? ??? ??? ??? ??? ???
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(...)
,无需重新格式化。
是的! 终于破解了密码! 非常感谢您的惊人解释和澄清。您的回答很有帮助。
所以基本上我必须做的是。
-
将我的查询更改为以下内容
$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
-
使用 iconv() 如下:
iconv('UTF-16LE','utf-8',$DataFromJDE);
通过逆向工程从这个答案中得到了线索https://stackoverflow.com/a/51130953/11835221
还有瞧!我得到了我的阿拉伯语数据!
希望有一天这能帮助另一个拉扯灵魂的头发。
干杯!