Нужно сначала разбить текст на группы attribute_name="attribute_value" затем для этих групп вызвать замену и это можно сделать при помощи
preg_replace_callback
регулярка для поиска
([^= ]+)="(.*?)"\s+(?=([^= ]+=|\/>))
см.
RegEx101
используем ее в preg_replace_callback, находим пары атрибут=значение и заменяем , делая подмену символов в значении через
htmlspecialchars
$str = '
<order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
<order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
<order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />
<order acode="7102774" ProductName="Какой-то текст "с скобочками", которые нужно заменть" ClientBarCode="" />';
$out = preg_replace_callback(
'/([^= ]+)="(.*?)"\s+(?=([^= ]+=|\/>))/',
function($m) {
return $m[1].'="'.htmlspecialchars($m[2], ENT_QUOTES).'" ';
},
$str);
echo $out;
см.
пример