Я отправляю эту строку шаблона регулярного выражения через JQuery Ajax как часть массива:
\[\[!?[^*$%+~]*($|\n)
Массив закодирован следующим кодом:
var data = formToJSON(form.elements);
var dataToSend = [];
dataToSend = "data=" + btoa(JSON.stringify(data, null, ""));
На приемном конце он конвертируется с помощью этого кода:
$data = json_decode(base64_decode($data,true), true);
Процесс работает со всеми другими действительными регулярными выражениями, которые я пробовал. При этом base64_decode () возвращает false. Виновником кажется символ ~ (он не используется в качестве разделителя). Если я удаляю это, это работает. Самое странное, что если я переместу его в любую другую позицию в классе персонажей, это сработает:
\[\[!?[^~*$%+]*($|\n)
Не имеет значения, какой символ предшествует символу ~, просто не может go в конце класса персонажа. Это не вызывает никаких проблем за пределами класса символов.
Знак плюс не является проблемой, равно как и установка второго аргумента для двух функций декодирования.
WTF вызывает это?