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

在php中将特殊字符转换为常规字母,php,Php,我正试图为数据库中的一系列菜单项构建一个搜索页面,这些菜单项通常包含特殊字符,如é(如sautéed),因此我想将搜索查询和数据库内容转换为常规字母,我遇到了麻烦。我正在使用ISO-8859-1,这样特殊字符将正确显示在网站上,我感觉这阻碍了我转换的尝试 header('Content-Type: text/html; charset=ISO-8859-1'); 搜索查询使用GET方法发送到search.php,因此查询“sautéed”将在地址栏中显示如下: search.php?q=sau

我正试图为数据库中的一系列菜单项构建一个搜索页面,这些菜单项通常包含特殊字符,如
é
(如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字符代码(
&233;
)。我尝试了
utf8\u编码($q)无效。其他字符,如
和<代码> +/<代码>在CurrasySth()函数中工作,但不是特殊的字母表,如<代码> E>  > 

到WITE,EY是几种语言中的正则字母表),同时您建议您想知道如何将文本隐藏到ASCII(哪些英语发言者可以考虑“正则”)。您真正应该做的是使用现代web最允许的编码,即UTF8

这样,您就可以接受任何语言的输入、保存、处理和备份,而无需规范化或转换为其他代码页


为您的页面提供源代码中的
,并提供一个http内容头以指示UTF8编码,事情应该会顺利得多。(请注意,对于现在已经失效的HTML 4.01或XHTML 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\u编码的更多信息,请参见。

当我执行此操作时,像é这样的字符显示为?。我需要能够确定,如果菜单上显示sautéed,用户只需键入sauteed,那么这是一个匹配项,这意味着不管如何转换角色,这就是我正在努力解决的问题。这就是所谓的标准化,应该在PEAR上为它提供一些库来实现这一目标。也就是说,只有当您发送的数据编码与您所说的不同时,才会出现显示为
的字符。因此,要像大多数现代网页一样工作,您需要使用一个php标题发送数据,该标题表示内容为UTF8,并使用一个标记声明源代码为UTF8,然后发送实际的UTF8数据(因此,您的文件是UTF8文件,如果在UTF8字符集/名称中使用,则连接到数据库)把é转换成e和把它转换成7一样荒谬