我遇到了一个问题,特殊字符被用作变量。
以下是与人物有关的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.
将使用Śý
等字母,我认为这些字母来自扩展拉丁语
答案 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');
这可以正确处理特殊字符。