Chrome7
замечал, что это не корректный способ, но в моем случае он отработал идеально.
Завтра тебе пришлют новый документ, в котором будет смесь из амперсандов и сущностей - и твой сегодняшний код сломает завтрашний документ, повредив сущности.
То есть ты написал костыль. Пока человек идёт на костылях по улице, это выглядит приемлемо и похоже на обычного человека без костылей, но если вдруг ему нужно будет успеть на автобус, двери которого вот-вот закроются, то он не только его не догонит, но ещё и упадёт прямо на улице, не удержав костыли при беге, и будет очень долго валяться. Что хаки, что костыли, - это всё вредные вещи, которые на первый взгляд выглядят прекрасно, но эта прекрасность обманчива и очень часто потом выходит таким боком, что даже изсправить ничего не возможно, остаётся только всю программу заново писать, либо отказаться от её применения к новым данным.
Chrome7
Подробнее о том, как это корректно сделать можно прочитать здесь:
Во-первых, у него слишком короткое регулярное выражение, так как сущностей в XML может быть больше.
https://www.w3.org/TR/xml-entity-names/И символы юникода также могут кодироваться через числовой код (в 10-чной и/или 16-ричной системе) с помощью амперсанда.
https://en.wikipedia.org/wiki/XMLAll permitted Unicode characters may be represented with a numeric character reference.
Во-вторых, даже если просто заменить кавычку с сущности ' на простую кавычку, его код не сможет это исправить, потому что расчитан только на неправильно выраженный амперсанд в xml-документе, и исправить свой код, чтобы он ещё и кавычку учитывал, он не сможет, так как у кавычки гораздо больше смежных случаев, чем у амперсанда.
А как же это исправить? Выше я написал, как: надо сделать простейший транслятор, который сначала идентифицирует именно тот амперсанд в контексте и/или именно ту кавычку в контексте и только после этого заменит их. При этом будет гарантировано, что он не заменяет не тот амперсанд или не ту кавычку. То есть нужно написать лексический анализатор на базе ДКА. В общем случае понадобится магазин, но для частного случая можно и без магазина обойтись. Вот из-за того, что этот парнишка не знает программирование глубже школьника, он и побирается по всяким сайтам и в конечном итоге приходит к полурабочему решению.