我正在尝试为我的数据库中的一堆菜单项构建一个搜索页面,这些菜单项通常包含é
等特殊字符(如sautéed中所示),所以我想将搜索查询转换为数据库内容为常规字母,我遇到了麻烦。我正在使用ISO-8859-1,以便在网站上正确显示特殊字符,我觉得这会阻碍我转换的尝试......
header('Content-Type: text/html; charset=ISO-8859-1');
使用GET方法将搜索查询发送到search.php,因此查询“sautéed”将在地址栏中显示如下:
search.php?q=saut%E9ed
这是我正在尝试构建的功能,这不起作用:
$q = $_GET['q'];
function clean_str($a) {
$fix = array('é' => 'e');
$str = str_replace(array_keys($fix), array_values($fix), $a);
return $str;
}
$fixed = clean_str($q); // currently has no effect
我尝试使用%29
作为数组键,以及HTML字符代码(é
)。我试过utf8_encode($q);
无济于事。其他字符(如!
和+
)在clean_str()函数中运行正常,但不是é
等特殊字母。
答案 0 :(得分:1)
也就是说,é是几种语言的常规字母表=)当你建议你想知道如何将文本转换为ASCII(英语使用者可能会认为是'常规')你真正应该做的是使用现代网络最宽松的编码,即UTF8。
这样,您就可以接受任何语言的输入,保存,处理和备份,而无需规范化或错误转换为其他代码页。
在源代码中使用<meta charset="utf-8">
为您的网页提供服务,并使用http内容标头来指示UTF8编码,事情应该更加顺畅。 (请注意,对于现已不存在的HTML 4.01或XHTML 1 / 1.1,您需要使用较旧的元标记语法。但是,非常不推荐将这些风格用于新项目)
答案 1 :(得分:1)
虽然您可能想重新考虑一下这样做的方式,但正如所建议的那样,我相信这会让您感到满意。
function clean_str($a) {
$fix = array('é' => 'e');
$str = str_replace(array_keys($fix), array_values($fix), $a);
return $str;
}
$fixed = clean_str(utf8_encode($_GET['q'])); // return an encoded utf8 string.
echo $fixed;
有关utf8_encode
的更多信息,请参阅here。