在php中将特殊字符转换为常规字母

时间:2014-08-12 23:18:49

标签: php

我正在尝试为我的数据库中的一堆菜单项构建一个搜索页面,这些菜单项通常包含é等特殊字符(如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()函数中运行正常,但不是é等特殊字母。

2 个答案:

答案 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