您需要在执行查询之前设置连接编码。如何完成此操作取决于您用于连接的API:
- 打电话
mysql_set_charset("utf8"),如果你使用的时候,弃用API。 mysqli_set_charset("utf8")如果使用mysqli则调用- 如果使用PDO和PHP> = 5.3.6,则将
charset
参数添加到连接字符串中。在早期版本中,您需要执行SET NAMES utf8
。
当您从MySQL获取数据时,任何文本都将以“客户端编码”进行编码,如果您未进行其他配置,则可能是Windows-1252。导致问题的字符是“弯引号”,如
92十六进制转储所示,它确认mysql客户端正在Windows-1252中对文本进行编码。
您可能会考虑的另一件事是,将所有文本传递给
utf8_enpre,但是在这种情况下,它不会产生正确的结果。PHP
utf8_enpre转换
iso-8859-1 编码的文本。在此编码中,
x92是不可打印的控制字符,它将在utf-8中转换为不可打印的控制字符。您可以使用
str_replace("x92", "'",$input)此特定字符来解决此问题,但是如果有可能数据库中将存在任何其他非ascii字符,您将希望客户端使用UTF-8。


