php-mysql搜索具有特殊字符


php mysql search with special character

我在mysql DB中有一个表,它包含了一些特殊字符,如:Å、Æ等。当我用php运行搜索时,我找不到这些字段。但是当我在phpmyadmin中运行相同的sql时,我会得到结果。这是表格结构:

CREATE TABLE IF NOT EXISTS `clientinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `adresse` varchar(160) NOT NULL,
  `gatenavn` varchar(20) NOT NULL,
  `husnr` varchar(20) NOT NULL,
  `bokstav` varchar(2) NOT NULL,
  `postnr` varchar(20) NOT NULL,
  `poststed` varchar(60) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=398 ;

这是一个示例查询:

SELECT * FROM clientinfo WHERE gatenavn = 'EKRAVEIEN' AND husnr = '1' AND postnr = '2010' AND poststed = 'STRØMMEN'

当我在phpmyadmin中运行这个查询时,我会得到结果;但当我使用php运行时,请不要忘记。我在用mysqli。需要一些帮助。

在进行查询之前,告诉您的连接实例要提供UTF-8。在MySqli中,您可以调用函数set_charset(),然后连接对象将传递UTF-8。

调用此函数使您独立于数据库配置,如果需要,连接将转换返回的数据。当然,如果不需要转换,它是最快的,所以调整配置也是一件好事。

// tells the mysqli connection to deliver UTF-8 encoded strings.
$db = new mysqli($dbHost, $dbUser, $dbPassword, $dbName);
$db->set_charset('utf8');

尝试设置:

SET NAMES utf8;

在同一个mysql会话中查询之前

如果您可以访问MySQL配置文件,请将这些设置设置为my.cfg:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

尝试使用htmlspecialchars php函数。

string htmlspecialchars ( string $string , int $flags = ENT_COMPAT | ENT_HTML401
                         , string $encoding = 'UTF-8' , bool $double_encode = true)

您可以更改字符串的encoding信息。例如,俄罗斯符号的KOI8-R

这可能是php.ini文件、Apache Web服务器或HTML文档或MySQL 的字符集的问题

要做的几件事:

始终确保在html元标签中将charset设置为utf8

设置

default_charset = "utf-8";

在php.ini文件中

并添加

AddDefaultCharset UTF-8

如果您正在输出unicode字符