【问题标题】:UTF-8 encoding and SESSION inconsistency?UTF-8 编码和 SESSION 不一致?
【发布时间】:2015-08-15 21:01:41
【问题描述】:

问题: 你好堆栈溢出! 所以这个编码的东西让我感到最后的紧张。在使用 AJAX 和 PHP 和 SQL 等来回发送内容时,很难弄清楚最好的编码组合是什么,这还不够。但它也会导致 SESSION 出现问题???!

所以基本上我已经找到了一个热修复解决方案——不感谢谷歌,部分原因是我现在写这篇文章。但我也想看看你们中是否有人真的有更实际的解决方案。

问题: 例如,如果我希望我的 PHP 文件具有 UTF-8 编码,它会在文件中添加隐藏字符,然后只能在十六进制编辑器中查看和删除。对于那些不知道的人,是的,任何未注释掉的额外字符都会导致 SESSION 出现问题并给您报头错误。因此,当我删除它们并重新上传文件时,它会退回到 ANSI 编码。也许有不同的编辑器可以将文件更正确地编码为 UTF-8?我不知道,我目前正在使用 Notepad++ 并且对它非常满意,很难相信它会导致编码问题。我还尝试更改.htaccess 文件中的默认编码,无论如何索引文件都没有区别。

【问题讨论】:

  • 那么,问题是什么?你编码了什么,你期望什么输出,你得到了什么?
  • 我编码的内容无关紧要,因为这里的代码没有试用,但 SESSION 和编码是。所以这个问题真的无关紧要。至于我的预期很清楚,在 index.php 中设置 SESSIONS 是 UTF-8 编码的 PHP 文件。至于错误,你们都知道:session_start(): Cannot send session cache limiter - headers already sent ...
  • 但是我的脚本目的有点难以解释。因为我从不同的网站复制了 UTF-8 编码的字符。然后我将它们传递到 ANSI 编码文件中。这给我带来了完全不同的东西。例如,这个商标 符号将在 ANSI 编码的 php 文件中变为 â„¢。这就是它在页面上以奇怪字符而不是实际 TM 符号显示的方式。还有一些标志比其他标志更难维护和替换,并且没有 HTML 的备用替代品,例如™
  • 我虽然发现您可以使用rawurlencode(); 来保留原始字符,然后您仍然可以以任何编码文件格式打印它们,并且它们会相应地调整自己,因为 url 编码擅长解释并在遇到字符时保留字符。当这些字符仍为 JSON 格式时需要编码时,可能会出现此问题。但是为此,我想我们可以制作一个小的字符白名单,在解析之前它应该重新编码回原来的形式。所以基本上,不需要 UTF-8 文件格式来显示特殊字符。

标签: php session encoding utf-8 character-encoding


【解决方案1】:

看起来,虽然我们得到了WARNING: session_start(): Cannot send session cache limiter - headers already sent ...,但会话仍然设置得很好,此时我们所能做的就是通过将它放在我们的 php 文件顶部来关闭警告错误:error_reporting(~E_NOTICE & ~E_WARNING); 虽然这没有' t 真正解决我们的问题,只是将其隐藏在公众视线之外。

【讨论】:

    【解决方案2】:

    页面打开 Notepad2 或 Sublime Text -> 使用编码保存 -> UTF-8

    index.php

    <?php 
     session_start();
     header('Content-type: text/html; charset=utf-8');
    
     echo 'Hello ÇÖİŞÜĞüğışçö'; // bla bla
    ?>
    

    【讨论】:

      【解决方案3】:

      解决方案: 因此,我必须通过为一个相同的索引制作两个单独的文件来进行修复,只是使用不同的编码。就像我的主文件是 ANSI 编码并称为

      index.php

      其中将包含session_start(); 行,在其下方我们包含原本应该存在的主要脚本,但现在包含在此include('index_.php'); 中...... ...我还发现这个问题不会发生在所有托管服务器上,而只会发生在一些服务器上。所以真正的解决方案可能在服务器设置的某个地方找到。

      【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2012-06-17
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      相关资源
      最近更新 更多