PHP会话字符串包含奇怪的空白/空字符

PHP会话字符串包含奇怪的空白/空字符,php,encoding,amazon-dynamodb,aws-php-sdk,Php,Encoding,Amazon Dynamodb,Aws Php Sdk,背景故事:我一直在尝试在我的Symfony2应用程序中实现DynamoDB会话句柄 当会话保存到DynamoDB时,我遇到了一个绊脚石。来自PHP的字符串似乎采用了某种奇怪的编码,其中包含非空白字符,这会阻止字符串正确保存在DynamoDB中。当我将字符串粘贴到PhpStorm中时,它也不能很好地播放 以下是它的一个示例: $illegalString='s:8:“用户数据”;O:27:“\SomeClass:49:{s:8:”�*�电子邮件:s:27:me@domain.com“s:13:”

背景故事:我一直在尝试在我的Symfony2应用程序中实现DynamoDB会话句柄

当会话保存到DynamoDB时,我遇到了一个绊脚石。来自PHP的字符串似乎采用了某种奇怪的编码,其中包含非空白字符,这会阻止字符串正确保存在DynamoDB中。当我将字符串粘贴到PhpStorm中时,它也不能很好地播放

以下是它的一个示例:

$illegalString='s:8:“用户数据”;O:27:“\SomeClass:49:{s:8:”�*�电子邮件:s:27:me@domain.com“s:13:”�*�名字“s:4:“格雷格”;

作为参考,这里有一个PhpStorm的屏幕截图,显示它不是空白。 此外,如果我尝试在这些字符上移动光标,其他字符开始出现,在光标下方的图像中,第1行最后一个分号左侧有两个空格,引号不存在于字符串中,但由于某种原因,当光标位于其上时,它会出现。

如果将上面的字符串复制/粘贴到下面的站点,则会断开页面:

三个问题:

  • 这个字符串有什么问题?它是什么样的时髦编码
  • 为什么PHP以这种方式处理会话字符串
  • 如何告诉PHP在创建会话字符串时仅使用UTF-8

  • 注意:这只出现在使用最新Linux AMI的AWS ec2上。

    这些字符表明您在某个地方编码有问题(从一个转换到另一个(可能是静默)或指定错误编码时)

    您拥有的序列似乎是
    EF BF BD
    (我在复制粘贴到UTF-8文档后看到的),它代表
    替换字符
    ——在从一种编码转换到另一种编码(或使用错误编码验证/清除)时用作非法字符的替换

    例如:
    A0
    字符在ISO 8599-1中有效,但如果您错误地将此类字符串视为UTF-8编码,则该字符在那里无效,并将被上述序列替换


    我建议在会话处理程序保存会话数据之前检查会话数据(特别是在使用自定义会话处理程序时)——在写入会话之前可能就是这样

    还要检查您正在使用的session.serialize_处理程序——特别是在使用自定义处理程序的情况下

    您还可以尝试编写自己的会话处理程序(将编码数据写入文件或其他任何内容的部分——这很容易)——查看处理程序收到的数据类型:是良好的还是已经“损坏”

    我本人未使用任何AWS服务,因此无法就这一部分提供建议