【发布时间】:2013-03-07 09:32:43
【问题描述】:
我有一个表单,用户可以在其中输入搜索词,基本上它是页面顶部的搜索栏。如果用户输入了任何内容,那么新页面也会包含他们输入的内容,以免他们忘记,就像 Google 所做的那样。
首先将页面设置为使用 UTF-8(该页面已正确 UTF-8 编码):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
输入框是:
<input class="sb_input" name="q" type="text" value="<?php if (isset($displaysearch)) echo $displaysearch; ?>" />
上面是一些用于清理搜索词的 PHP 代码:
$search=$_GET['q'];
$displaysearch=preg_replace('@[^\p{L}| ]@','',trim($search));
问题是,如果我输入Über,新页面的搜索框会显示�ber,我也搞不明白哪里出错了。
【问题讨论】:
-
你说文件被正确编码为UTF-8?然后也许你的网络服务器发回一个 HTTP 标头,说一些不同的东西。虽然这会很奇怪。确保它返回 HTTP 标头
content-type: text/html; charset=UTF-8。您可以在任何其他输出之前通过 PHP 代码中的header('content-type: text/html; charset=UTF-8');行来实现这一点。 Manual page -
这似乎表单不发送 UTF-8 而是 ISO。
-
@pvorb,我试过了,但没有任何区别。
-
@Alasdair 好的。那么,如果您将“Über”直接放入 HTML(不通过 PHP 变量)会发生什么?
-
@pvorb,显示正确...但手动输入的文本仍然不正确。