Предыстория: я пытался реализовать дескриптор сеанса DynamoDB в своем приложении Symfony2.
Я столкнулся с камнем преткновения, когда сеанс сохраняется в DynamoDB. Похоже, что строка, исходящая из PHP, имеет какую-то странную кодировку, содержащую пустые символы, которые не являются пробелами, что затем препятствует правильному сохранению строки в DynamoDB. Строка также не работает, когда я вставляю ее в PhpStorm.
Вот пример этого:
$illegalString = 's:8:"userData";O:27:"\SomeClass":49:{s:8:"�*�email";s:27:"[email protected]";s:13:"�*�first_name";s:4:"Greg";';
И для справки, вот снимок экрана из PhpStorm, показывающий, что это не пробел. Кроме того, если я попытаюсь переместить курсор на эти символы, другие символы начнут появляться в изображение под моим курсором - это пара пробелов слева от последней точки с запятой в строке 1, кавычка не существует в строке, но по какой-то причине она появляется, когда на ней находится мой курсор.
Если вы скопируете/вставите указанную выше строку на указанный ниже сайт, она разорвет страницу: http://www.asciivalue.com/index.php
Три вопроса:
- Что не так с этой строкой? Что за странная кодировка?
- Почему PHP обрабатывает строки сеанса таким образом?
- Как я могу указать PHP использовать только UTF-8 при создании строк сеанса?
Примечание. Похоже, это происходит только на AWS ec2 с последней версией Linux AMI.