|
| |
|
|
| |
для: Владимир55
(30.07.2007 в 15:33)
| | | htmlspecialchars() обрабатывает ТОЛЬКО символы '<', '>', '&' и в зависимости от режима '"' (двойная кавычка) и ''' (одинарная кавычка).
Input'ы не предназначены для ввода переводов строк. Для этого есть textarea.
[поправлено модератором] | |
| |
|
|
| |
|
|
| | Суть проблемы: при работе скрипта теряются коды ПС, находящиеся в переменных, вследствие чего меняется их длина. Чтобы исследовать это явление, я сделал макет, поместив в папку с именем tmp текстовые файлы с кодами, и папку tmp1, в которую должны записываться текстовые файлы в окончательной редакции. В текстовом файле хранится такая запись:
жХИМ 2001-вЕИЛ 2002
Коды записи:
E6 D5 C8 CC 20 32 30 30 31 2D E2 C5 C8 CB 20 32 30 30 32 0D 0A
Скрипт-макет имеет такие коды:
$n_ss = file_get_contents("data/yes-ss.txt"); // Количество найденных ссылок
for ($j = 1; $j <= $n_ss; $j++) // Воспроизведение массива ссылок
{
$adr_tmp = 'tmp/' . $j . '.txt' ; // Имя и адрес файла текста ссылки
$ssilka[$j] = file_get_contents($adr_tmp) ;
}
echo"<form action='?act=".$n_ss."' method='post'>"; // Вводим тексты формк
for ($j = 1; $j <= $n_ss; $j++)
{
echo "<input type=text size=110 name=\"peremen".$j."\" value=\""
. htmlspecialchars($ssilka[$j])
. "\"><br/>";
}
echo '<input type="submit" value="Ввести" >' ;
echo "</form>";
if ($_GET['act']==$n_ss) // Запоминаем результат коррекции
{
for ($j = 1; $j <= $n_ss; $j++)
{
$ssilka[$j] = $_POST["peremen$j"];
}
// Сохраняем с удалением забракованных ссылок
$min = file_get_contents("data/min.txt"); // Минимальная длина ссылки
$n_v = 0; // Количество выбранных ссылок
for ($j = 1; $j <= $n_ss; $j++)
{
$dlina_ss_tmp = strlen ($ssilka[$j]);
if ($dlina_ss_tmp >= $min)
{
++$n_v;
$adr_tmp = 'tmp2/' . $n_v . '.txt' ; // Имя и адрес файла хранения текста ссылки
$file = fopen ($adr_tmp, "w") ; // Создание нового файла или очистка имеющегося
fputs ($file, $ssilka[$n_v]) ; // Запись ссылки
fclose ($file) ; // Закрытие файла
}
}
}
|
После работы скрипта в текстовом файле образуется такой код:
E6 D5 C8 CC 20 32 30 30 31 2D E2 C5 C8 CB 20 32 30 30 32
Получается, что два последних знака кода, ответственные за перевод каретки и возврат строки, "откусила" форма ввода, ибо больше грешить не на что!
А если так, то что делать?
====
Как можно предположить, htmlspecialchars не вводит эти коды, поскольку их не видит. Вероятно, продублировать их - единственный выход. | |
| |
|
|
|