【发布时间】:2010-10-07 08:12:50
【问题描述】:
我有一个以非 UTF-8 格式提供的表单(实际上是在 Windows-1251 中)。当然,人们会在那里发布他们喜欢的任何角色。浏览器有助于将 unpresentable-in-Windows-1251 字符转换为 html 实体,因此我仍然可以识别它们。例如,如果用户键入 →,我会收到 →。这部分很棒,例如,如果我只是回显它,浏览器无论如何都会正确显示 →。
问题是,我实际上在显示之前对文本做了一个 htmlspecialchars()(这是一个将特殊字符转换为 HTML 实体的 PHP 函数,例如 & 变为 &)。我的用户有时会输入— 或© 之类的内容,而我想将它们显示为实际的— 或©,而不是- 和©。
我无法区分 → 和 →,因为我把它们都当作 →。而且,由于我 htmlspecialchars () 文本,和我还从浏览器中获得了一个 → 的 →,我回显了一个 →,它在浏览器中显示为 →。所以用户的输入被破坏了。
有没有办法说:“好的,我在 Windows-1251 中提供此表单,但是您请把输入的 UTF-8 发送给我,让我自己处理” ?
哦,我知道将整个软件切换到 UTF-8 是个好主意,但这工作量太大,我很乐意快速解决这个问题。如果这很重要,表单的 enctype 是“multipart/form-data”(包括文件上传器,因此不能使用任何其他 enctype)。我使用 Apache 和 PHP。
谢谢!
【问题讨论】: