在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一样荒谬