尝试使用重音符保存字符串时遇到问题。
我们的在线系统由来自不同国家/地区的客户使用,因此我们的一些客户使用重音符号。
在执行请求以获取值时保存
$value = trim(strip_tags(htmlspecialchars($_REQUEST['value'], ENT_QUOTES, 'UTF-8')));
以这种方式保存价值
Gé
如果不是htmlspecialchars我使用htmlentities它会像这样保存
géî
我想保存的正确字符串是
Gé
我需要将其正确保存,以便在屏幕和报告中正确显示。
我们的数据库使用UTF-16(MS SQL Server),我声明元标记在页面上使用UTF-8
<meta charset='utf-8'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
这是连接的外观:
$link = sqlsrv_connect($dbserver, array(
'Database'=>$database,
'UID' => $uid,
'PWD' => $pwd,
'CharacterSet' => 'UTF-8'
));
答案 0 :(得分:1)
经过一些试验和错误,这是我找到的解决方案。
sqlsrv_connect默认情况下是连接池,因此连接保留在应用程序池中。
默认情况下,sqlsrv_connect()使用连接池来提高连接性能。要关闭连接池(即在每次调用时强制建立新连接),请将$ connectionOptions数组中的“ConnectionPooling”选项设置为0(或FALSE)。有关更多信息,请参阅»SQLSRV连接池。
我的连接曾经是这样的
$link = sqlsrv_connect($dbserver, array(
'Database'=>$database,
'UID' => $uid,
'PWD' => $pwd
));
没有字符集。
即使我将字符集添加到连接后,我仍然遇到了这个错误。
这是我现在的联系。
$link = sqlsrv_connect($dbserver, array(
'Database'=>$database,
'UID' => $uid,
'PWD' => $pwd,
'CharacterSet' => 'UTF-8'
));
我强制浏览器使用元标记使用UTF-8后,它正确保存到数据库但显示不正确。这是因为我两次编码为UTF-8,然后在显示时删除了第二个编码。
毕竟我执行了IIS重置以重置应用程序池,并强制脚本在处理后关闭连接,如下所示:
// Close the connection.
sqlsrv_close( $linkEventlogic );
现在可以正常使用了。
答案 1 :(得分:-1)
你的方式看起来不错,试试:
$string = "\* this is test string *\";
echo utf8_encode($string);
作品?