表单中的特殊字符在同一页面上使用变量

时间:2014-08-21 12:55:08

标签: php html

我遇到了一个问题,特殊字符被用作变量。

以下是与人物有关的HTML:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
<form class="nav-search left" method="POST" enctype="application/x-www-form-urlencoded">
    <input name="summoner_name" type="text" placeholder="Summoner Name" required autofocus />
</form>

这是试图获得$_POST的PHP:

$summoner = htmlspecialchars($_POST['summoner_name']);
$summoner_name = strtolower($summoner);

-> outputs nothing, as it isn't read properly.

将使用Śý等字母,我认为这些字母来自扩展拉丁语

1 个答案:

答案 0 :(得分:1)

使用this walkthrough作为起点,我会说:

第一

...确认您的应用程序正在发出Content-Type: text/html; charset=utf-8标头。没有理由不这样做,而且非常简单。

下一步

...您可能遇到真正问题的第一个地方就是您的表格。再次引用上述链接the encoding to be used for application/x-www-form-urlencoded data is practically undefined

确保您的表单使用设置为accept-charset"utf-8")的属性accept-charset="utf-8"

再多

...如果你在这里没有使用数据库,那么那里没什么可做的,但如果你把这些数据存储在一个数据库中,那几乎就是肯定发生错误编码的地方。

在数据库中可能出现很多问题 - 从连接到存储数据的方式,以及如何检索数据。如果您在将数据发送回浏览器之前完全使用数据库存储此数据,请特别注意确保数据库正确编码并检索UTF-8文本。

最后

... strtolower doesn't convert characters not represented by your locale。如果您的语言区域是en-US,则您的特殊UTF-8字符将不会被转换,并且您将获得一个空字符串(如果没有其他任何字符)。< / p>

如果您使用mb_strtolower,则可以传递以下编码:mb_strtolower($summoner, 'UTF-8'); 这可以正确处理特殊字符。