【问题标题】:Windows files and encoding UTF-8 with PHPWindows 文件和使用 PHP 编码 UTF-8
【发布时间】:2016-10-07 10:03:12
【问题描述】:

Windows Server 中的 UTF-8 编码存在一些问题。

使用会话变量:$_SESSION['share'] = '\\server\share\almodóvar';

我读了这个,结果是\\server\share\amod�var,这在scandir中工作没有问题。

mb_detect_encoding($_SESSION['share']); 的结果是 UTF-8。

但是,如果我刷新页面并读取会话变量,结果是\\server\share\amod?var,并且 scandir 不再起作用。

mb_detect_encoding($_SESSION['share']); 的结果是 ASCII。

我已经尝试了一些 php 函数,比如 utf8_encode() 和其他的,但是这不起作用。

你能帮帮我吗?

PS:我不知道它是否有帮助,但我正在使用 Joomla CMS。我认为这不是问题。

提前谢谢你。

【问题讨论】:

  • 你试过htmlspecialchars()吗?我怀疑当 PHP 将变量保存/恢复到文件(它存储会话变量的位置)时,它会损坏。
  • 是的,我试过了,我也遇到了同样的问题。谢谢你的尝试。
  • 看起来很有趣。我将创建一个测试用例。
  • 我不知道是会话变量的问题还是编码的问题......这很奇怪。 ://
  • 当你设置了值,立即检查,值是好的。但是,在刷新时(它有可能被写入服务器磁盘/文件或客户端 cookie;并复活)​​,该值被破坏。我假设您尝试过 convert_uuencodeconvert_uudecode ? UU 编码的字符串应该足够安全,可以在网络/磁盘写入中存活。我无法使用 PHP 服务器对其进行测试。

标签: php windows encoding utf-8 ascii


【解决方案1】:

在我看来,问题是我的 Joomla CMS 损坏了 PHP SESSIONS,而且他们有自己的运行良好的会话。

进入 Joomla,他们有 JSESSIONS。如果有人在寻找同样的问题,我会告诉你他们的会话代码。


这是 Joomla 会话(它们避免了大部分编码和网络服务器问题等):

解决方法:替换 session_start();在您的外部脚本中使用

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../..' ));

require_once ( JPATH_BASE. '/includes/defines.php' );
require_once ( JPATH_BASE. '/includes/framework.php' );
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();

请务必更改 JPATH_BASE 以适合您的目录结构。

替换 $_SESSION[ 'name' ] = "value";在您的外部脚本中使用

$session = JFactory::getSession();
$session->set('name', "value");

现在您可以使用以下方法检索此会话变量:

$session = JFactory::getSession();
echo $session->get('name');

我希望这对任何人都有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2010-12-11
    • 1970-01-01
    • 2014-02-17
    • 2011-07-07
    • 2019-01-22
    • 2012-08-02
    相关资源
    最近更新 更多