PHP使用重音保存字符串

时间:2013-05-08 09:00:51

标签: php sql-server-2008 character-encoding sqlsrv

尝试使用重音符保存字符串时遇到问题。

我们的在线系统由来自不同国家/地区的客户使用,因此我们的一些客户使用重音符号。

在执行请求以获取值时保存

$value = trim(strip_tags(htmlspecialchars($_REQUEST['value'], ENT_QUOTES, 'UTF-8')));

以这种方式保存价值

Gé

如果不是htmlspecialchars我使用htmlentities它会像这样保存

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'
));

2 个答案:

答案 0 :(得分:1)

经过一些试验和错误,这是我找到的解决方案。

sqlsrv_connect默认情况下是连接池,因此连接保留在应用程序池中。

  

默认情况下,sqlsrv_connect()使用连接池来提高连接性能。要关闭连接池(即在每次调用时强制建立新连接),请将$ connectionOptions数组中的“ConnectionPooling”选项设置为0(或FALSE)。有关更多信息,请参阅»SQLSRV连接池。

来自PHP Manual - sqlsrv_connect

我的连接曾经是这样的

$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);

作品?