Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > HTML код в переменной


Автор: Aarons 27.2.2010, 20:34
Приветствую вас дамы и господа. Прошу вас помочь в решении такого вопроса :

Каким образом можно заполнить переменную $test  html кодом, что-бы не было проблем с ковычками.

Просто при добавлении html через такой код php :

Код

$a_update_config  = "<?\r\n";
$a_update_config .= "\$test = \"".$_POST['test']."\";\r\n";
$u_update_config = fopen("test.php","w+");
fputs ($u_update_config,$a_update_config);


html искожается , тобишь ковычки принимают такой вид - /" или /' 

Если потом подгрузить эту переменную и сохранить снова , то в html ковычки становятся такими - //"

С уважением , Аарон.

Автор: Ипатьев 27.2.2010, 21:18
Во-первых, слово кавычка пишется через "а". Запомнить несложно.
Во-вторых, надо отключить в конфиге опцию magic_quotes_gpc и тогда слеш к кавычкам не будет добавляться в текстах, пришедших из формы.

Автор: bars80080 27.2.2010, 21:30
Цитата(Ипатьев @  27.2.2010,  20:18 Найти цитируемый пост)
register_globals

а не magic_quotes ?

Автор: Ипатьев 27.2.2010, 21:32
тьфу.
все в голове уже перемешалось.
magic_quotes_gpc
с третьей попытки, вроде, получилось

Автор: Demogargon 27.2.2010, 21:54
Можно вывести все красиво через heredocument. 
Код

$var <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon. no extra whitespace!
END;
echo $var;



Автор: Ипатьев 27.2.2010, 21:59
А еще можно читать вопрос перед тем, как в голову ударит мысль на него ответить

Автор: Aarons 1.3.2010, 22:04
Господа. Давайте опишу проблему более подробно.
Есть форма добавления новостей в файл :

Код

<form action="" enctype="multipart/form-data"  method="post">
<?print LANGPL12;?><br>
<input name='rc_name_news' type='text' id='input_login' value="<?print $_POST['rc_name_news']?>">
<br><br>
<?print LANG4;?><br>
<select name='rc_katigoria' id='input_login'>
<?PHP
require "./codes/rc_admin/rc_news/rc_list_katigoria.php";
?>
</select>
<br><br>
<?print LANGPL13;?><br>
 <?PHP
 require "./codes/rc_func/rcodes/r_codes_image_panel.php";
 ?>
<textarea name="rc_text_news" id="textarea_news" style="width: 100%;"><?print $_POST['rc_text_news']?></textarea>
<br><br>

<?print LANGPL14;?><br>
 <?PHP
 require "./codes/rc_func/rcodes/r_codes_image_panel2.php";
 ?>
<textarea name="rc_text2_news" id="textarea_news2" style="width: 100%;"><?print $_POST['rc_text2_news']?></textarea>

<br><br>
<?print LANGPL32;?><br>
<input name='rc_tags_news' type='text' id='input_login' value="<?print $_POST['rc_tags_news']?>"><br>
<font size='1px'><?print LANGPL33;?></font><br>
<br><br>
<input name='rc_add_news' type='submit' value='<?print LANG11;?>' id='input_login'>
</form>


После отправки запроса, идёт проверка и добавление :

Далее идёт проверка на наличие кавычек в тексте и замена их на html код :
(Отрывок кода проверки)
Код

$r_codes = str_replace('"',"&quot;",$r_codes); 
$r_codes = str_replace("'",''',$r_codes); 


После идёт запись новости в файл :

Код

require "./RC_DB/".$rc_db_cfg."/rc_news_katigoria/".$_POST['rc_katigoria'].".php";
require "./codes/rc_func/rcodes/r_codes_func.php";

$r_codes = $_POST['rc_text_news'];
require "./codes/rc_func/rcodes/r_codes_func.php";
$rc_text_news = $r_codes;

$r_codes =$_POST['rc_text2_news'];
require "./codes/rc_func/rcodes/r_codes_func.php";
$rc_text2_news = $r_codes;

$a_update_config  = "<?\r\n";
$a_update_config .= "\$rc_name_news = \"".$_POST['rc_name_news']."\";\r\n";
$a_update_config .= "\$rc_text_news = \"".$rc_text_news."\";\r\n";
$a_update_config .= "\$rc_text2_news = \"".$rc_text2_news."\";\r\n";
$a_update_config .= "\$rc_katig_news = \"".$rc_name_katigoria."\";\r\n";
$a_update_config .= "\$rc_katig_id_news = \"".$_POST['rc_katigoria']."\";\r\n";
$a_update_config .= "\$rc_tags_news = \"".$_POST['rc_tags_news']."\";\r\n";
$a_update_config .= "\$rc_date_news = '$time_today $date_today';\r\n";
$u_update_config = fopen("./RC_DB/".$rc_db_cfg."/rc_news/".$_GET['news'].".php","w+");
fputs ($u_update_config,$a_update_config);

$message_news = LANGPL15;
require "./codes/rc_templates_panel/message.tpl";


Даже когда в переменную $rc_text_news идёт запись не " , а &quot; , всё равно перед &quot; ставится \ 
Также и перед кавычкой ' 

Вот такая проблема. Не могли бы вы помочь в решении этого. 

p.s. Уважаемые программисты, когда я делал в другом скрипте такой метод, там добавлялось всё нормально. А в этом скрипте почему то не работает как надо.

С уважением Аарон.


Автор: Sentox 1.3.2010, 23:21
Слэш добавляется перед Вашим скриптом, то есть перед тем как скрипт начинает обрабатывать, програмно отключайте "волшебные кавычки" или обрабатывайте результат c удалением их(слэшей) из массива.
Код

function stripFormSlashes($arr)
{
    if(is_array($arr))
    {
        return stripslashes($arr);
    } 
    else {
        return array_map('stripFormSlashes', $arr);    
    }
}

if(get_magic_quotes_gpc())
{
    $_REQUEST   = stripFormSlashes($_REQUEST);
}

Автор: capitan 1.3.2010, 23:29
Я например делаю так:
Код

$text = base64_encode(serialize($content));


И далее сохраняю в файл $text.

Автор: bars80080 2.3.2010, 00:39
Цитата(capitan @  1.3.2010,  22:29 Найти цитируемый пост)
Я например делаю так:
$text = base64_encode(serialize($content));

зачем, интересно?


Цитата(Aarons @  1.3.2010,  21:04 Найти цитируемый пост)
Господа. Давайте опишу проблему более подробно.

вообще-то, ответ уже был дан. можно, конечно, и подробнее

на этом новом для вас хостинге (где получается не так как раньше) включена такая настройка, как magic_quotes, суть её в том, чтобы добавлять во входящие данные слэши перед "опасными" символами. то есть перед кавычками.
если её впадлу выключить (что делается одной строчкой в .htaccess файле), то все входящие переменные достаточно пропускать через stripslashes(), которая будет уничтожать слэши, там где они добавились.

есть резонный вопрос: зачем была нужна эта настройка? ответ: для безопасной вставки данных в базу.
к сожалению, горячие головы администраторов хостинга не догадались, что это нужно не всегда. 
следует второй вопрос: как обезопасить вставляемые данные, если мы отключаем эту настройку (либо убираем слэши)?
ответ: перед самой вставкой данных в запрос их надо обрабатывать функцией mysql_real_escape_string() , если используется в качестве БД mysql. либо аналогичной, для другой базы

вопрос (уже от меня), нужно ли это:
Цитата(Aarons @  1.3.2010,  21:04 Найти цитируемый пост)
$r_codes = str_replace('"',"&quot;",$r_codes); 
$r_codes = str_replace("'",''',$r_codes); 

для нормального функционирования сайта? ответ: нет, не нужно. может только навредить.
для того чтобы всякие кавычки, а также знаки < и > и тому подобные (типа &), не могли разрушить хтмл-вёрстку, достаточно выводимые данные пропустить через функцию htmlspecialchars(), что делают обычно на выходе, при отдачи текста в браузер
эта функция с большей эффективностью сделает всё что нужно по переводу кавычек в &quot; и прочих символов

Автор: Aarons 2.3.2010, 14:30
Благодарю всех. Прописал просто в .htaccess php_value magic_quotes_gpc off .


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)