html — полоски в форме PHP

У меня есть HTML-форма, которая после отправки должна представлять поля формы в файле PHP внутри оператора echo (который также содержит элементы HTML)

У меня проблема в том, что, хотя результаты выдаются, как и ожидалось, в определенных случаях, когда в записях формы есть «или», они не экранированы на странице results.php

Мои файлы:

form.html

<form action="./results.php" method="post" id="sgemail">
<table align="center" border="1" width="60%" style="border-color: #D2DFF5;">
<tr>
<td width="50%" style="padding-left: 8px; text-align: left;">
<div class="form-group">
<strong>Article 1 Title<br /></strong>
<input type="text" class="form-control" id="ifn1title" placeholder="" name="ifn1title"><br />
<strong>Article 1 URL<br /></strong>
<input type="text" class="form-control" id="ifn1url" placeholder="" name="ifn1url">
</div>
</td>
<td width="50%" style="padding-left: 8px; text-align: left;">
<div class="form-group">
<strong>Article 1 Description<br /></strong>
<textarea rows="5" class="form-control" cols="10" name="ifn1desc" form="sgemail"></textarea>
</div>
</td>
</tr>
</table>
<table align="center" width="60%">
<tr>
<td align="center" width="33%" style="padding-left: 8px; text-align: left;">
<input class="btn btn-primary" type="submit" value="Generate Results HTML Code">
</td>
</tr>
</table>
</form>

results.php

<?php
if (isset($_POST['ifn1title']))
if (isset($_POST['ifn1url']))
if (isset($_POST['ifn1desc']))
{
$form_ifn1t = $_POST['ifn1title'];
$form_ifn1u = $_POST['ifn1url'];
$form_ifn1d = $_POST['ifn1desc'];

echo "<table style=\"background-color:#D6E3F0;\" bgcolor=\"#D6E3F0\" align=\"center\" width=\"100%\">
<tr align=\"center\">
<td align=\"center\"><br />

<textarea id=\"selectori\" rows=\"50\" cols=\"120\" onclick=\"this.focus();this.select()\" readonly=\"readonly\">

<ul>
<li><a href=\"$form_ifn1u\"><strong>$form_ifn1t</strong></a><br />$form_ifn1d</li>
</ul>

</textarea>
</td>
</tr>
</table>";
}
?>

Когда я отправляю форму,

Результаты в соответствующих местах отображаются как

<ul>
<li><a href="http://www.example.com"><strong>\"Article\"</strong></a><br />\"Test Description\"</li>
</ul>

Как это исправить, чтобы результаты были чистыми, как показано ниже?

<ul>
<li><a href="http://www.example.com"><strong>Article</strong></a><br />Test Description</li>
</ul>

Спасибо

Редактировать:

Я добавил следующее в верхней части моего файла php, и это исправило мою проблему

{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

Это нормально с защитой от внедрения кода?
Спасибо

0

Решение

Я в PHP 5.3.29 Как отключить магические кавычки на этот файл

Вы не хотите этого делать.
Вы хотите, чтобы они ушли, полностью, раз и навсегда.

Увидеть Вот за то, что они есть, почему они существуют, почему они плохие и как их отключить.

Короче говоря, вы должны действительно обновить версию PHP.

Если вы не можете этого сделать, вам, вероятно, следует сменить хостеров или выбросить все, что мешает вам сделать это.

Третий лучший вариант — отключить магические кавычки:

php_flag magic_quotes_gpc Off

И худший вариант, если вы действительно не можете сделать что-либо из перечисленного выше, это stripslashes за каждую запись в $_GET, $_POST, $_COOKIE а также $_REQUEST если вы используете их.
Потому что вы не можете отключить магические кавычки во время выполнения.
Скопировано 1: 1 из Вот:

<?php
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}

В вашем случае это было бы просто

$form_ifn1t = stripslashes($_POST['ifn1title']);
$form_ifn1u = stripslashes($_POST['ifn1url']);
$form_ifn1d = stripslashes($_POST['ifn1desc']);

Но пожалуйста обновить версию PHP!

0

Другие решения

Лучший способ отобразить html и php:

<?php echo "<div class='my-class'>some HTML here, but i want my ".$php_variable." also in this text</div>";?>

Между прочим, всегда сложно использовать «в PHP-коде, когда вы выводите« », поэтому я всегда использую один«, поэтому мне не нужно исключать ».

PS: прямое отображение переменных $ _POST — не самый безопасный способ. Чтобы убедиться, что вы в некоторой степени защищены от внедрения кода, обязательно используйте что-то базовое, как показано ниже:

$sendVar = stripslashes(htmlentities($_POST['var']));

Это также должно исправить любые проблемы с сообщениями, содержащими косую черту

-2

По вопросам рекламы [email protected]