我一直在使用MySQL,但是现在我不得不使用SQL Server,我迷路了。我只想用西班牙语写一行,但是我不能让它工作。下面是代码,希望一切都有意义。
$connection = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$server;Database=$database;", $user, $password);
$sql="SELECT * FROM my_table";
$res=odbc_exec($connection,$sql)or die(exit("Error en odbc_exec"));
while($arr = odbc_fetch_array($res)) {
$var = $arr["OkRef"];
echo "1.- ".iconv("Windows-1256", "UTF-8", "$var")."<br />";
echo "2.- ".iconv("CP437", "UTF-8", $var)."<br />";
echo "3.- ".iconv("CP850", "UTF-8", $var)."<br />";
echo "4.- ".utf8_decode($arr["OkRef"])."<br />";
echo "5.- ".utf8_encode($arr["OkRef"])."<br />";
echo "6.- ".$arr["OkRef"]."<br />";
echo "7.- ".mb_convert_encoding($arr["OkRef"], "utf-8", "windows-1251")."<br />";
echo "8.- ".htmlspecialchars( iconv("iso-8859-1", "utf-8", $var) );
}
}
我得到的结果是:
1.-第122节)
2.-Θr ατHσ¼ º d_元数据包1Y │º0 .122)─
3.-122)©─ ─
4.-数据包类型
5.-122)
6.-第一次发送的元数据包
7.-122)∨ Д ==============
8.-122)
我还试图添加以下内容(显然不是立刻添加),以使其按原样工作:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
header('Content-Type: text/html;charset=utf-8');
header('Content-Type: text/html;charset=iso-8859-1');
ini_set('mssql.charset', 'UTF-8');
服务器是Microsoft SQL Server企业版,服务器排序规则是Modern_Spanish_CI_AS。
2条答案
按热度按时间zf2sa74q1#
我知道,这个答案发布得太晚了,但是我最近也遇到了类似的情况,所以我想分享一下我的经验。我的配置几乎是一样的-数据库和表列都使用Cyrillic_General_CS_AS排序规则。注意,我使用的是PHP驱动程序,而不是内置的ODBC支持。
下面的步骤帮助我解决了我的问题。我使用了你的例子中的排序规则。
数据库:
PHP代码:
在php.ini文件中设置
default_charset = "UTF-8"
。用UTF-8编码源文件。我使用Notepad++完成这一步。从数据库读取数据:
$data = iconv('CP1252', 'UTF-8', $data);
。注意,默认情况下,数据以8位字符返回,该字符在系统上设置的Windows区域设置的代码页中指定。任何多字节字符或未Map到此代码页的字符都将替换为单字节问号(?)字符。这是默认编码。HTML格式:
用途:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
工作示例:
php(PHP 7.1,用于SQL Server 4.3的PHP驱动程序,文件test.php是UTF-8编码的):
crcmnpdw2#
天啊,这就成功了:“$data = iconv('CP 1252','UTF-8',$数据);“或者在我的情况下:
如果您有任何问题,请联系我们。
如果您是一个用户,请输入以下命令:
过去三天我一直在寻找解决办法!谢谢你,若洛夫!