LINUX.ORG.RU

Как определить что строковая переменная не пуста?

 ,


0

1

Ну понятно что обычно делают так: $str!=". Есть даже делают так: strlen($str)>0. И еще можно придумать стопятцот способов в таком же духе. Но если в переменной что-то типа « » от таких способов легче не становится. Короче - как вы определяете что переменная содержит выводимый текст, а не просто мусор оставленный очередным визуальным редактором?

Тут вопрос не в том как именно это сделать - потому что тут тоже over9000 вариантов которые я и сам сейчас на коленке слабаю, а как сделать это максимально просто и быстро. Желательно еще и красиво (хотя что может быть красивого на php...).

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)

в переменной что-то типа «  »

даже когда ты её декодируешь, она не будет пуста. там будет пробел. так что, выбирай способ по задаче. если надо обработать и такие необычные случаи, делай, например, регулярное выражение. или удаляй все пробелы из строки, а уже потом проверяй на пустоту.
скорость данных подходов надо бы, для начала, сравнить.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 1)

Но если в переменной что-то типа « » от таких способов легче не становится.

trim() и станет легче. А потом strcmp($s, ""). Наверное можно empty() юзать в этом случае(вроде как trim() всегда строку выдаёт)

emulek
()
Ответ на: комментарий от emulek

да, от 0xA0 ессно не поможет. Это уже ручками надо делать(trim() умеет ещё и список символов жрать, правда не очень ясно, ЧТО ты имеешь ввиду под nbsp, это символ или html-сущность? Если последнее, то <script>...</script> это тоже «пустая строка»)

emulek
()
Ответ на: комментарий от emulek

Да - все так и есть - «<script>...</script>» это тоже пустая строка. Всякие вебредакторы встроенные в CMS любят оставлять после себя кучу мусора. Мне надо определить содержит ли строка текст который будет виден в браузере. В идеале это невозможно конечно. Но все же...

Т.е. как лобовой вариант - удаляем все теги (регуляркой?), удаляем все символы навроде злосчастного   и пробелы, табуляции, переводы строк/возвраты каретки и т.п. чешую, а потом проверяем что строка длиннее 1 символа (предполагая что осмысленный текст не может быть короче 2 символов). Вот как-то так.

Suntechnic ★★★★★
() автор топика
Последнее исправление: Suntechnic (всего исправлений: 1)
Ответ на: комментарий от Suntechnic

Да - все так и есть - «<script>...</script>» это тоже пустая строка.

это может быть всё, что угодно.

CMS любят оставлять после себя кучу мусора.

только CMS-зависимо. Иначе никак.

предполагая что осмысленный текст не может быть короче 2 символов

может: ☺

emulek
()
Ответ на: комментарий от Suntechnic

И чо trim? Он же не удалит спецсимвол.

а то. Удалит, если ей список дашь. Твой nbsp имеет код 0xA0. А вот про то, что ты кучу скриптов/форматирование/картинки/фреймы/таблицы/формы считаешь «невидимым мусором» — я как-то не догадался...

emulek
()

1. Учись правильно задавать вопросы.

2. Проверяй регуляркой.

geekless ★★
()
Ответ на: комментарий от Suntechnic

Да ты упорот. Тебя люди не понимают, что именно ты считаешь мусором, откуда же понять тебя интерпретатору без словаря?

VirRaa ★★★
()

  это не пустота, это non-breaking space. Если ты их выведешь 100500 штук подряд сразу всё поймёшь.

Конвертируй в нормальный текст (ну или «интерпретируй» прямо так), потом вооружись справочником по пробельным символам юникода и вперёд, сверяй.

anonymous
()
Ответ на: комментарий от Suntechnic

В юникоде есть огромное количество символов, которые не выводят или выводят разные виды пробелов, но имеют значение. Ты отстал от жизни.

anonymous
()
Ответ на: комментарий от anonymous

... которые никогда не введет обычный юзер через встроенные в CMS визуальный редктор на сайте работающем на cp1251

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

визуальный редктор

Для ввода юникода визуальный редактор не нужен. В некоторые ОСях даже в контекстном меню есть некоторые пункты, что уж говорить про всякие типографские и прочие раскладки.

cp1251

На винфак!

anonymous
()

Если мусор для тебя только html-строки, то

 if (! trim(strip_tags($string)) ) {

 }

и успокойся уже. Нельзя думать над задачей так долго, если у неё есть чёткая область применения — обработка входных данных после какого-нибудь tinymce.

alexmaru
()
Ответ на: комментарий от alexmaru

Просто хочу добавить универсальную функцию чтобы юзать ее потом везде. Спасибо за вариант.

Suntechnic ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.