将通过表单提交的UTF-8字符显示回表单的问题

时间:2013-03-07 09:32:43

标签: php html utf-8

我有一个用户可以输入搜索字词的表单,基本上它是页面顶部的搜索栏。如果用户输入了任何内容,那么新页面也会包含他们输入的内容,以免他们忘记,就像谷歌一样。

首先将页面设置为使用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,而我无法弄清楚它出错的地方。

1 个答案:

答案 0 :(得分:2)

HTML <meta>标签可能是最不相关的位。确保您已阅读并理解UTF-8 all the way through。此外:

  • 您没有测试是否定义了$_GET['q']。这表明您已禁用完整错误报告。如果是这样的话,那么在你走得更远之前,你需要先解决这个问题;没有错误消息的帮助就不可能编码。这是一个brief explanation
  • 您正在将未转义的文字注入HTML:您需要使用htmlspecialchars()
  • 您在正则表达式中省略了u modifier,因此您的文本将被处理为单字节。