На работе я столкнулся с проблемой, когда пользователи нашего приложения получали сообщения с недопустимым символом Unicode (0xffff), которые в соответствии со стандартом никогда не должны отображаться на символ.
Какбыстрое окончание работы Я сделал следующее:
badStr.replace(/\uffff/g, " ");
, который работает, как ожидалось, и позволяет пользователю продолжать использовать приложение, пока мы не найдем лучшее решение.
Однако, пока я игралпри этом я случайно попытался заменить строку «$$$$», которая каким-то образом оказалась свернутой «$$».
Вы можете убедиться сами.Попробуйте вставить следующие строки в строке URL браузера:
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "@@@@"));
приводит к @@@@
, но
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "$$$$"));
приводит к $$
На самом деле, похоже, это проблема с любой заменой строки, с $$$$ в качестве замены строки.
Оба:
javascript: alert(String.fromCharCode(0x1234).replace(/\u1234/g, "$$$$"));
javascript: alert("hella".replace("h", "$$$$"));
приводят к краху $$.
Есть идеи, почему замена строк ведет себя так?