PHP会话字符串包含奇怪的空白/空字符
背景故事:我一直在尝试在我的Symfony2应用程序中实现DynamoDB会话句柄 当会话保存到DynamoDB时,我遇到了一个绊脚石。来自PHP的字符串似乎采用了某种奇怪的编码,其中包含非空白字符,这会阻止字符串正确保存在DynamoDB中。当我将字符串粘贴到PhpStorm中时,它也不能很好地播放 以下是它的一个示例: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:”
$illegalString='s:8:“用户数据”;O:27:“\SomeClass:49:{s:8:”�*�电子邮件:s:27:me@domain.com“s:13:”�*�名字“s:4:“格雷格”;
作为参考,这里有一个PhpStorm的屏幕截图,显示它不是空白。
此外,如果我尝试在这些字符上移动光标,其他字符开始出现,在光标下方的图像中,第1行最后一个分号左侧有两个空格,引号不存在于字符串中,但由于某种原因,当光标位于其上时,它会出现。
如果将上面的字符串复制/粘贴到下面的站点,则会断开页面:
三个问题:
注意:这只出现在使用最新Linux AMI的AWS ec2上。这些字符表明您在某个地方编码有问题(从一个转换到另一个(可能是静默)或指定错误编码时) 您拥有的序列似乎是
EF BF BD
(我在复制粘贴到UTF-8文档后看到的),它代表替换字符
——在从一种编码转换到另一种编码(或使用错误编码验证/清除)时用作非法字符的替换
例如:A0
字符在ISO 8599-1中有效,但如果您错误地将此类字符串视为UTF-8编码,则该字符在那里无效,并将被上述序列替换
我建议在会话处理程序保存会话数据之前检查会话数据(特别是在使用自定义会话处理程序时)——在写入会话之前可能就是这样 还要检查您正在使用的session.serialize_处理程序——特别是在使用自定义处理程序的情况下 您还可以尝试编写自己的会话处理程序(将编码数据写入文件或其他任何内容的部分——这很容易)——查看处理程序收到的数据类型:是良好的还是已经“损坏” 我本人未使用任何AWS服务,因此无法就这一部分提供建议