【问题标题】:PHP: how to get the input encoded in ANSI [duplicate]PHP:如何获取以 ANSI 编码的输入 [重复]
【发布时间】:2014-05-21 00:48:11
【问题描述】:

当添加诸如 ?key=é 之类的 get 参数时,PHP 会立即将该值转换为 UTF8。 我的脚本不是 UTF8,我必须通过执行 $_GET['key']

来获取 ISO-8859-1 中的数据

该值的 strlen 应该是 1。不是 2。

如何在不使用 mb 或 iconv 等依赖项的情况下以非 UTF8 格式获取该数据。

【问题讨论】:

  • 我不想将字符串转换为 HTML。我希望 strlen($_GET['key']) 给我 1。

标签: php utf-8 character-encoding iso-8859-1


【解决方案1】:

当添加诸如 ?key=é 之类的 get 参数时,PHP 会立即将该值转换为 UTF8。我的脚本不是 UTF8,我必须通过执行 $_GET['key']

来获取 ISO-8859-1 中的数据

这个说法不正确。 PHP 在这里不负责 — 网络浏览器 以 UTF-8 字符串编码将数据发送到网络服务器,而 PHP 以相同的形式将其传递给您的应用程序。

请记住,“ANSI”不是字符串编码。它是 Windows 系统有时用来(错误地!)指代系统的本机字符串编码的术语,在英语系统上通常是 Windows-1252(类似于 ISO-8859-1),但可能因区域设置而异。

该值的 strlen 应该是 1。不是 2。

要让strlen() 以字符而不是字节为单位返回长度,您需要激活 PHP 的 multibyte function overloading,这是 mbstring 扩展的一个功能,或者将字符串转换为单字节字符串使用iconv 进行编码(这将是一个有损过程)。

如果没有 mbstring、iconv 或类似的东西,就无法执行此转换。

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 2021-04-05
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多