我之前在.Net中做过这个,但我对PHP有点新,可以使用一些帮助。我正在尝试从MSSQL db中提取PHP中的数据,其中一些是希腊字母。 MSSQL列的数据类型为nvarchar
,希腊字符在管理工作室中正确显示;然而,每当我用php中的sqlsrv_query
函数提取数据时,我都会得到一堆问号。
在sqlsrv_connect
功能中,我尝试设置无效的CharacterSet"=>"UTF-8
我试过了iconv()
,但我不确定要使用哪些套装
我尝试mb_detect_encoding()
并返回ASCIIASCII
。
以下是一些示例代码:
public function _getOrderItemDetails($orderItemIds,$productTypeId){
$params = explode(',', $orderItemIds);
$sql = "select od.*, ofs.Sort
from orderDetail od
left join orderFieldSort ofs on ofs.fieldName = od.name and productTypeId in ($productTypeId)
where orderItemid in (".rtrim(str_repeat('?,', count($params)),',').")
order by ofs.sort";
return $this->_compileResults($sql,'OrderDetail',$params);;
}
private function _compileResults($sql,$classType,$params ){
$result = sqlsrv_query($this->conn,$sql,$params);
$arrayResult = array();
while($orderObject = sqlsrv_fetch_object($result,$classType)){
array_push($arrayResult, $orderObject);
}
return $arrayResult;
}
欢迎任何建议。请帮忙!
答案 0 :(得分:0)
可能会尝试一些事情。
1)您能确切地验证数据库的字符编码吗?我建议使用UTF8,因为它应该处理最广泛的字符。根据我的知识,“ASCIIASCII”不是一个字符编码你的意思是“ASCII”吗?
2)尝试使用mysql_set_charset('utf8');
更改字符集以匹配您的数据库编码。它“设置当前连接的默认字符集。”从当前的PHP脚本中。 PHP official docs
3)这是异常值,但你在哪里查看结果?与数据库返回的数据无关如果您在Web浏览器中查看结果,如果这是从数据库返回的字符集中未匹配,则需要确保页面在头部设置了适当的包机编码它可能导致问号或钻石......通常是这样的东西
<head>
<title>page title</title>
<meta charset="UTF-8" />
</head>
答案 1 :(得分:0)
我遇到了完全相同的问题,所以当我在寻找解决方案时,我看到了你的问题。答案非常简单。我想你的代码中的某个地方用以下代码连接到数据库:
$serverName = "YOUR_SERVER";
$connectionInfo = array("Database"=>"YourDatabase");
$link = sqlsrv_connect($serverName,$connectionInfo);
if(!$link ) {
die('Could not connect: ' . mysql_error());
}
要显示希腊字符,您需要更改第2行:
$connectionInfo = array("Database"=>"YourDatabase");
到:
$connectionInfo = array("Database"=>"YourDatabase","CharacterSet"=>"UTF-8");
,其余代码保持不变。 这个解决方案是由@Graham提出的,我认为是他自己的问题,而且它来自这里:Greek character insertion in php compared to SQL server management studio