Как преобразовать уже созданную строку (с одинарными кавычками) в строку с двойными кавычками (чтобы это могло повлиять на escape-последовательности) - PullRequest
4 голосов
/ 13 августа 2011

Я пытаюсь прочитать данные с помощью $ _POST, который был отправлен через форму. Форма отправляет данные в восьмеричном формате. это часть формы:

<input type="hidden" name="chap-challenge" value="\314\130\024\000\350\025"

проблема в том,

echo $_POST['chap-challenge'];

даст мне буквальную строку:

\314\135\024\000\354\025

что не совпадает с

echo "\314\135\024\000\354\025";

как я могу каким-то образом преобразовать эту строку в строку в двойных кавычках, чтобы она могла понять, что они являются восьмеричными значениями?

Ответы [ 3 ]

3 голосов
/ 13 августа 2011

Вы можете оценить его как выражение php, но в нем недостаточно безопасности - пример .

<?php
echo "\100\101\102\103\104\n";

$c = '\100\101\102\103\104';
eval( '$c2="'.$c.'";' );

echo $c,"\n";
echo $c2;

Edit:

Также вы можете разобрать его для себя - пример :

<?
echo "\100\101\102\103\104\n";

$c = '\100\101\102\103\104';
$c2 = explode('\\',$c);
$c3 = array();
$c4 = array();
foreach($c2 as $cc) {
   $c3[] = octdec($cc);
   $c4[] = chr(octdec($cc));
}
$c4 = implode('',$c4);

echo $c,"\n";
var_dump($c3);
var_dump($c4);

Edit:

Чтобы удалить первый элемент из массива, используйте: функция array_shift .

2 голосов
/ 13 августа 2011

$_POST не использует кавычки для своих строк.Это просто не оценивает их.Цитаты для программиста.Вам нужно немного обработать эту строку, а затем передать ее в base_convert() function

0 голосов
/ 21 сентября 2011

Возможно, вы можете решить проблему, сохранив 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 говорят: " преобразование в ресурс не имеет смысла. "
Возможно, кто-то знает взлом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...