0

我有一个表单,用户可以在其中输入搜索词,基本上它是页面顶部的搜索栏。如果用户输入了任何内容,那么新页面也会包含他们输入的内容,以免他们忘记,就像 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,我不知道哪里出错了。

4

1 回答 1

2

HTML<meta>标签可能是最不相关的部分。确保您从头到尾都阅读并理解了 UTF-8。此外:

  • 您没有测试是否$_GET['q']已定义。这表明您已禁用完整的错误报告。如果是这种情况,那么您需要在更进一步之前解决它;没有错误消息的帮助是不可能编码的。这是一个简短的解释
  • 您正在将未转义的文本注入 HTML:您需要使用htmlspecialchars()
  • 您在正则表达式中省略了u修饰符,因此您的文本被作为单字节处理。
于 2013-03-07T11:26:07.133 回答