|
|
|
| Привет!
Столкнулся с проблемой проверки строки на пустоту.
Строки записываются в mysql, перед записью обрабатываю ее и проверяю, если пустая то выводим ошибку иначе записываем.
Но если посетитель отправит кучу 'enter' даже без текста строка все равно пройдет на запись. Как удалить или проверить на пустоту строки если в ней присутствует не один перенос а много /r/n
Пример кода:
<textarea name="str" cols="15" rows="15"></textarea>
<input type="sumbit" name="insert" value="Отправить">
<?php
function check_text($str) {
$str = stripslashes($str);
$str = mysql_real_escape_string($str);
$str = trim($str);
$str = htmlspecialchars($str);
$str = str_replace(array("\r\n","\n","\r"), '', $str); // удалит только 1 перенос не все
return $str;
}
if(isset($_POST['insert'])) {
$str = check_text($_POST['str']); // допустим отправлено пустоее сообщение состоящее только из множества Enter (переносов строк)
if($str == '') {
echo 'ошибка пусто';
} else {
echo 'Ваше сообщение:'.nl2br($str);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(20.04.2012 в 16:38)
| | как вы считаете подойдет ли такой вариант? не сильно ли он ужасен?
<?php
$str_arr = explode('\n', $str);
$str = check_arr($str_arr);
function check_arr($array) {
$result = array();
foreach ($array as $key => $value) {
if ($value != '') {
$result_str .= $value.'\r\n';
}
}
return $result_str;
}
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(20.04.2012 в 16:38)
| | По логике действий, сперва удаляют пробелы в строке, а уж после этого издеваются на нею.
htmlspecialchars при внесении в базу, это головная боль при последующей работе со строкой.
Для удаления пробелов в строке содержащей только их, или переводов строки, достаточно операции trim.
<?
$s = '
';
var_dump($s);
$s = trim($s);
var_dump($s);
|
| |
|
|
|
|
|
|
|
для: confirm
(20.04.2012 в 20:01)
| | Спасибо! Да действительно головную боль htmlspecialchars уже вызвал, буду его использовать только при выводе | |
|
|
|
|
|
|
|
для: confirm
(20.04.2012 в 20:01)
| | .А если мне нужно удалить так же пустые строки между буквами? хорош ли вариант представленный выше где данные заносятся в массив?
То есть из данных:
получить
| |
|
|
|
|
|
|
|
для: tima2010
(20.04.2012 в 20:33)
| |
$str = preg_replace( "#\s*?\r?\n\s*?(?=\r\n|\n)#s" , "" , $str );
|
| |
|
|
|