编码/解码/插入法语重音字符的问题

时间:2011-01-17 20:03:36

标签: php sql-server utf-8 character-encoding

我正在尝试将以下字符串写入数据库:

打印时扬声器格栅波纹效果。

'é'字符让我头疼不已。我无法使用htmlentities,因为数据库是桌面应用程序的一部分。我的HTML是UTF-8。

在我(5天计数)尝试调试此问题期间,我使用桌面应用程序将相同的字符串插入到数据库中,这似乎工作正常,但是有问题的字符显示为“?” - 甚至使用htmlentitiesutf8_encode

这些是我在尝试插入字符串时收到的错误消息:

警告:PDOStatement :: execute()[pdostatement.execute]:message:字符串'speaker grille moir'前面的未闭合引号。 (严重程度15)

警告:PDOStatement :: execute()[pdostatement.execute]:常规SQL Server错误:检查来自SQL Server的消息(严重级15)

警告:PDOStatement :: execute()[pdostatement.execute]:消息:第1行:'speaker grille moir'附近的语法不正确。 (严重程度15)

请帮忙!

更新(2011-01-18)

显然,数据库字符编码为SQL_Latin1_General_CP1_CI_AS。这是SQL Server等同于ISO-8859-1吗?是不是ISO-8859-1 PHP的默认字符编码?

更新2 (2011-01-18)

如此接近!在DSN字符串中包含charset=UTF-8,允许我插入“é”字符,并在桌面应用程序中正确显示。它仍然显示为'?'但是在网页中,即使我在预格式化功能中使用$text_block = htmlentities( $text_block, ENT_NOQUOTES, 'UTF-8' );

2 个答案:

答案 0 :(得分:1)

确保使用PDO绑定正确传递动态字符串,以便正确转义。

还要确保您的数据库连接也是UTF-8字符集。

您在数据库/字段中的集合也应设置为UTF-8,但如果不是这样,则可能不会导致此类错误。

答案 1 :(得分:0)

您是否尝试在数据库中使用具有重音敏感排序规则的NVARCHAR数据类型? 在您的数据库中执行以下测试并告诉我们它是否有效:

- 打印时扬声器格栅波纹效果。 如果object_id('tempdb.dbo。#test')不为null     drop table #test create TABLE #test(test NVARCHAR(1000)collat​​e Latin1_General_CI_AS)

插入#test(测试) 选择'打印时的扬声器格栅莫尔效果'。

选择* 来自#test