Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   PHP, пустая строка, сообщение (https://javascript.ru/forum/server/11010-php-pustaya-stroka-soobshhenie.html)

Slawaq 02.08.2010 11:56

PHP, пустая строка, сообщение
 
как можно узнать ли пустая строка всмысле если там только символы пробела типа
$string = " ";
если 1 и больше символов пробела есть и при этом в строке только символы пробела то сделать то, ну короче проверка на пустое, так сказать сообщение

Slawaq 02.08.2010 12:06

и ещё когда использую функцию типа
msg.replace('\n','\v') то заменяет только 1 символ перевода строки если их там их несколько то оно один раз переносит а потом просто всё соиденяет чере пробел, как эту проблему решить?

Gozar 02.08.2010 12:14

Цитата:

Сообщение от Slawaq (Сообщение 65958)
как можно узнать ли пустая строка всмысле если там только символы пробела типа
$string = " ";
если 1 и больше символов пробела есть и при этом в строке только символы пробела то сделать то, ну короче проверка на пустое, так сказать сообщение

проверять регуляркой: "присутствуют ли непробельные символы"

Gozar 02.08.2010 12:16

Цитата:

Сообщение от Slawaq (Сообщение 65961)
и ещё когда использую функцию типа
msg.replace('\n','\v') то заменяет только 1 символ перевода строки если их там их несколько то оно один раз переносит а потом просто всё соиденяет чере пробел, как эту проблему решить?

какую проблему? и что нужно сделать?

Slawaq 02.08.2010 12:17

а можно сразу функцию которая проверяет строку и возвращает тру или фолс, а то я ещё не читал реги для php, а?))
и ещё как сделать чтобы реплейс заменял больше одного раза?

ну смотри если такое сообщение водиться
"dfgdf
dfgdf
fdg
xccg
v" то после того как я делаю с этим replace('\n','\v') то мне выводит такое
"dfgdf
dfgdf fdg xccg v" то есть получаеться только один раз делает реплейс чтоли?

Gozar 02.08.2010 12:38

Цитата:

Сообщение от Slawaq (Сообщение 65966)
ну смотри если такое сообщение водиться
"dfgdf
dfgdf
fdg
xccg
v" то после того как я делаю с этим replace('\n','\v') то мне выводит такое
"dfgdf
dfgdf fdg xccg v" то есть получаеться только один раз делает реплейс чтоли?

<textarea id="c">dfgdf
dfgdf
fdg
xccg
v</textarea>
<script>var s = document.getElementById('c').value;
alert(s.replace(/[\r\n]+/g,'\v'))</script>

модификатор g - глобал
кстати для чего вы заменяете на \v?

Gozar 02.08.2010 12:41

по поводу php можно попробовать комбинацию:$a = trim($a), а затем strlen($a) > 0, не уверен, тороплюсь, срочно бегу

но вообще лучше регой,

Slawaq 02.08.2010 17:33

replace(/[\r\n]+/g,'\v') о это то) а от ещё, я делаю то типа гостевую книгу так вот, когда передаю через гет в закодированном виде текст, коду ПХП, а ПХП просто типа его выводит через echo, так вот если в текстареа был введён такой текст
"ываыв выа ываыва!


авпвап вапва фывф"
то потом мне выводит
"ываыв выа ываыва!
авпвап вапва фывф"
вопрос, как сделать чтобы она не убирало лишние пробелы и переносы, ну и там символы табуляции?
п.с. Кстати тут на форуме мне убрало пробелы между "вапва фывф"

nemo 02.08.2010 17:38

if($moya_peremennaya=='на то что реигирует услвоие, если пробел то ищи пробел в гугле на языке php'){пусто}else{не пусто}
в карму плюс

Slawaq 02.08.2010 17:55

Цитата:

Сообщение от nemo (Сообщение 66029)
if($moya_peremennaya=='на то что реигирует услвоие, если пробел то ищи пробел в гугле на языке php'){пусто}else{не пусто}
в карму плюс

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

x-yuri 02.08.2010 19:44

по поводу проверки на пустую строку: trim + strlen, (ирония) если же ты хочешь уличить пользователя во вставке лишних пробелов, тогда регулярные выражения

textarea не убирает ни пробелы, не переносы строк, ни табуляции. Так что отлаживай, где они у тебя там убираются

Slawaq 02.08.2010 19:48

ну как проверить строку на наличие непечатаемых символов, и чтобы если в строке нету других символов так возвратить фолс
Цитата:

trim + strlen
проблема в том что оно просто очистит строку и всё таки напечатает пустоту, которая обвёрнута и зарегестрированна как сообщение, то есть не совсем то, тем более если пользователь написал типа " цва " то будет наверно потом "цва" а это не совсем конечно то что хотел видеть пользователь, и ещё от то что связано как сделать чтобы пробел заменялся не один раз например для проверки я поставил к document.getElementById('txAr').value.replace(' ','-') и написал от что
"тест тест тест" а вывело "тест-тест тест" от такие пироги, я только знаю что я тут не правильно сделал и кажется что тут надо не реплейс, ну короче что тут надо?)

x-yuri 02.08.2010 20:07

список непечатаемых символов в студию. Как убрать пробельные символы выше сказали

Slawaq 02.08.2010 20:18

ну я сам хотел бы ВЕСЬ список ну это типа такие как табуляция, перенос строки, пробел, ну я не знаю сколько их ну те которые по сути не отображаются но влияют на строку, да я понял с пробелом но я не понял чего несколько пробелов подряд стираются в один, от код отправки
msg = document.getElementById('txAr').value;
  if(msg){
    msg = 'msg=' + encodeURIComponent(msg.replace(/[\r\n]+/g,'\v').replace(/ +/g,'-'));
    xmlhttp.open("POST","ajax.php",true);
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlhttp.send(msg);
}

а от ПХП код
<?PHP
if (isset($_POST['msg'])){
echo str_replace('>','&gt;',str_replace('"','&quot;',str_replace("'",'&#39;',str_replace('<','&lt;',$_POST['msg']))))."<hr style='height:1px;background:silver;border:0px'>";
}
?>

и прием
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById('txAr').value = '';
    document.getElementById("commArea").innerHTML+=xmlhttp.responseText;
    }
  }


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

x-yuri 02.08.2010 21:07

Цитата:

Сообщение от Slawaq
проблема в том что оно просто очистит строку и всё таки напечатает пустоту

не обязательно выводить ту же переменную
$s = '...';
$s2 = trim($s);
if( strlen($s2) == 0 )
    echo "обязательное поле";
echo $s;


Цитата:

Сообщение от Slawaq
куда они убегают, я не знаю

для начала выясни в каком месте это происходит. Отлаживай, на клиенте это console.log, на сервере var_dump($var), error_log($var), file_put_contents(dirname(__FILE__).'/.log', var_export($var, TRUE), FILE_APPEND)

Gozar 02.08.2010 21:12

Цитата:

Сообщение от Slawaq (Сообщение 66049)
но я не понял чего несколько пробелов подряд стираются в один
replace(/ +/g,'-')

не знаю что у вас за проблема пустых сообщений, у меня такой нет и за последние 7 лет сайтов с форумами и сервисами небыло. Не хотите пропускать "такие сообщения" проверяйте регой. А вообще есть такое слово бан. А от дибилов которые придумают писть мат через дефисы или транслитом или иероглифами ваша защита не поможет. проще поставить бан по кол-ву сообщений в секунду, минуту.

Slawaq 02.08.2010 21:17

Цитата:

Сообщение от x-yuri (Сообщение 66054)
Отлаживай, на клиенте это console.log, на сервере var_dump($var), error_log($var), file_put_contents(dirname(__FILE__).'/.log', var_export($var, TRUE), FILE_APPEND)

я не сильно в этом силён, я не сильно вникаю в роботу своего сервера и я ещё не очень хорошо умею работать на ПХП(так себе, базово пока что)

Slawaq 02.08.2010 21:29

Цитата:

Сообщение от Gozar (Сообщение 66055)
не знаю что у вас за проблема пустых сообщений, у меня такой нет и за последние 7 лет сайтов с форумами и сервисами небыло. Не хотите пропускать "такие сообщения" проверяйте регой. А вообще есть такое слово бан. А от дибилов которые придумают писть мат через дефисы или транслитом или иероглифами ваша защита не поможет. проще поставить бан по кол-ву сообщений в секунду, минуту.

та какой бан) это же гостевая книга, там надо только будет поставить задержку между сообщениями, может дето в 1-2 сек. ну короче, от например даже на этом форуме если идёт несколько пробелов подряд так оно его как 1 видит, но при этом если несколько подряд переносов



так всё нормально, а у меня не так и не так, и я не могу понят чего так, или например вконтакте там тоже если подряд идут непечатаемые символы то оно их как один видит.
Тут вдруг я вот что посмотрел, в Опере замена переноса на \v одно и тоже , если выводить это у Оперы, то это как обычный перенос а у всех других браузеров нет! и теперь у меня даже не переносит на новую строку, короче я в шоке всеми этими не большими проблемами, которых очень много! короче у кого есть валидатор или статья по нему для текста на всякие эти СПЕЦ символы, если вообще это есть.?)

Gozar 02.08.2010 22:08

Slawaq,
То, что вам нужно это RegExp, идите и изучайте, не так уж это и сложно. Они есть и для js и для php.

ps: и излагать мысли тоже подучитесь, вас сложно понять

x-yuri 02.08.2010 22:52

Цитата:

Сообщение от Gozar
ps: и излагать мысли тоже подучитесь, вас сложно понять

+1

Slawaq 02.08.2010 23:28

)) ой, йа нуб..)
надо было просто текст, который я вывожу оформлять в тег <p> или <span>, и всё)) я пол-дня потратил возившись с оформление выводимого текста, а сам забыл про старый добрый ШТМЛ и его абзацы..
а я то думал что и куда убегает, наверное это был мой мозг))


Часовой пояс GMT +3, время: 01:38.