Учитывая некоторые многобайтовые наборы символов, могу ли я предположить, что следующее не делает то, что оно предназначалось?
$string = str_replace('"', '\\"', $string);
В частности, если вход был в наборе символов, который может иметь допустимый символ, такой как 0xbf5c, так что злоумышленник может ввести 0xbf22, чтобы получить 0xbf5c22, оставив действительный символ, за которым следует некорректная двойная кавычка (").
Есть ли простой способ смягчить эту проблему, или я вообще не понимаю проблему?
(В моем случае строка входит в атрибут value входного тега HTML: echo 'input type = "text" value = "'. $string. '" > ';)
EDIT: В этом отношении, как насчет функции, такой как preg_quote()? Для этого нет аргументов для набора символов, поэтому в этом сценарии кажется совершенно бесполезным. Если у вас нет возможности ограничить кодировку UTF-8 (да, это было бы хорошо), похоже, что вы действительно инвалид. Какие функции замены и кавычки доступны в этом случае?