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