Windows文件和编码UTF-8与PHP


Windows files and encoding UTF-8 with PHP

我在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。我认为这不是问题所在。

提前感谢。

问题是我的Joomla CMS在我看来破坏了PHP session,他们有自己的session,工作得很好。

在Joomla中,有JSESSIONS。如果有人正在寻找相同的问题,我可以让您查看他们的会话代码。


这是Joomla会话(他们避免了大多数编码和web服务器问题,等等):

解决方案:替换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');

我希望这能对大家有所帮助。