【问题标题】:Issue displaying UTF-8 characters submitted through a form back into the form将通过表单提交的 UTF-8 字符显示回表单的问题
【发布时间】: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,显示正确...但手动输入的文本仍然不正确。

标签: php html utf-8


【解决方案1】:

HTML &lt;meta&gt; 标签可能是最不相关的部分。确保您已阅读并理解UTF-8 all the way through。另外:

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

【讨论】:

  • $_GET['q'] 始终被定义,这是访问此页面的唯一方法。我会尝试你的建议,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2011-06-01
  • 2011-11-04
  • 1970-01-01
  • 2020-02-13
  • 2011-11-15
相关资源
最近更新 更多