Возможно, вы можете решить проблему, сохранив html-сущности этих символов или используя PHP для их генерации.
<input name="chap-challenge" value='<?php echo "\100\130\024\000\350\025" ?>
$ _ POST ['chap-challenge'] теперь будет начинаться с %40
, что переводится PHP как @
и т. Д.
Чтобы ответить на ваш вопрос, хотя:
Любая строка, передаваемая в MySQL, даже если она была в одинарных кавычках, обрабатывается и сохраняется так, как если бы она была в двойных кавычках и оценивалась.
Теоретически, вы можете настроить БД на безопасном изолированном сервере, передать запрос, получить результат и затем mysql_escape ответ перед использованием:
$str = '\100Bobby \"Tables \n';
mysql_query("UPDATE parse SET str = '$str' WHERE id='0'");
$out = mysql_query("SELECT str FROM parse WHERE id='0'");
//echo array_pop(mysql_fetch_array($out)); echoes @Bobby "Tables
$out = mysql_real_escape_string(array_pop(mysql_fetch_array($out)));
mysql_query("...")// Using the correct yet safe string
На практике это означает, что если бы был какой-то способ превратить строку в ресурс mysql, это был бы безопасный и эффективный способ преобразования строки в одинарных кавычках в строку в двойных кавычках.
К сожалению, хорошие люди в PHP говорят: " преобразование в ресурс не имеет смысла. "
Возможно, кто-то знает взлом?