diff --git a/src/infrastructure/cluster/PhabricatorDatabaseRef.php b/src/infrastructure/cluster/PhabricatorDatabaseRef.php
--- a/src/infrastructure/cluster/PhabricatorDatabaseRef.php
+++ b/src/infrastructure/cluster/PhabricatorDatabaseRef.php
@@ -393,7 +393,7 @@
 
         if ($is_replica) {
           $latency = idx($replica_status, 'Seconds_Behind_Master');
-          if (!strlen($latency)) {
+          if (!phutil_nonempty_string($latency)) {
             $ref->setReplicaStatus(self::REPLICATION_NOT_REPLICATING);
           } else {
             $latency = (int)$latency;
diff --git a/src/infrastructure/contentsource/PhabricatorUnknownContentSource.php b/src/infrastructure/contentsource/PhabricatorUnknownContentSource.php
--- a/src/infrastructure/contentsource/PhabricatorUnknownContentSource.php
+++ b/src/infrastructure/contentsource/PhabricatorUnknownContentSource.php
@@ -7,7 +7,7 @@
 
   public function getSourceName() {
     $source = $this->getSource();
-    if (strlen($source)) {
+    if (phutil_nonempty_string($source)) {
       return pht('Unknown ("%s")', $source);
     } else {
       return pht('Unknown');
diff --git a/src/infrastructure/daemon/PhutilDaemon.php b/src/infrastructure/daemon/PhutilDaemon.php
--- a/src/infrastructure/daemon/PhutilDaemon.php
+++ b/src/infrastructure/daemon/PhutilDaemon.php
@@ -295,7 +295,7 @@
   }
 
   public function didReceiveStdout($data) {
-    if (!strlen($data)) {
+    if (!phutil_nonempty_string($data)) {
       return '';
     }
 
diff --git a/src/infrastructure/daemon/PhutilDaemonHandle.php b/src/infrastructure/daemon/PhutilDaemonHandle.php
--- a/src/infrastructure/daemon/PhutilDaemonHandle.php
+++ b/src/infrastructure/daemon/PhutilDaemonHandle.php
@@ -165,12 +165,12 @@
     list($stdout, $stderr) = $future->read();
     $future->discardBuffers();
 
-    if (strlen($stdout)) {
+    if (phutil_nonempty_string($stdout)) {
       $this->didReadStdout($stdout);
     }
 
     $stderr = trim($stderr);
-    if (strlen($stderr)) {
+    if (phutil_nonempty_string($stderr)) {
       foreach (phutil_split_lines($stderr, false) as $line) {
         $this->logMessage('STDE', $line);
       }
diff --git a/src/infrastructure/diff/prose/PhutilProseDifferenceEngine.php b/src/infrastructure/diff/prose/PhutilProseDifferenceEngine.php
--- a/src/infrastructure/diff/prose/PhutilProseDifferenceEngine.php
+++ b/src/infrastructure/diff/prose/PhutilProseDifferenceEngine.php
@@ -79,11 +79,15 @@
       } else {
         $old = $block['old'];
         $new = $block['new'];
-        if (!strlen($old) && !strlen($new)) {
+
+        $is_old_ok = phutil_nonempty_string($old);
+        $is_new_ok = phutil_nonempty_string($new);
+
+        if (!$is_old_ok && !$is_new_ok) {
           // Nothing to do.
-        } else if (!strlen($old)) {
+        } else if (!$is_old_ok) {
           $result->addPart('+', $new);
-        } else if (!strlen($new)) {
+        } else if (!$is_new_ok) {
           $result->addPart('-', $old);
         } else {
           if ($too_large) {
diff --git a/src/infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php b/src/infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php
--- a/src/infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php
+++ b/src/infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php
@@ -139,7 +139,7 @@
     $not_applicable = '-';
 
     $coverage = $this->getCoverage();
-    if (!strlen($coverage)) {
+    if (!phutil_nonempty_string($coverage)) {
       return $not_applicable;
     }
 
@@ -157,7 +157,7 @@
     $not_applicable = '-';
 
     $coverage = $this->getCoverage();
-    if (!strlen($coverage)) {
+    if (!phutil_nonempty_string($coverage)) {
       return $not_applicable;
     }
 
diff --git a/src/infrastructure/export/field/PhabricatorOptionExportField.php b/src/infrastructure/export/field/PhabricatorOptionExportField.php
--- a/src/infrastructure/export/field/PhabricatorOptionExportField.php
+++ b/src/infrastructure/export/field/PhabricatorOptionExportField.php
@@ -15,11 +15,13 @@
   }
 
   public function getNaturalValue($value) {
+
+    // TODO: Remove this case since it's probably already covered
     if ($value === null) {
       return $value;
     }
 
-    if (!strlen($value)) {
+    if (!phutil_nonempty_string($value)) {
       return null;
     }
 
diff --git a/src/infrastructure/export/field/PhabricatorStringExportField.php b/src/infrastructure/export/field/PhabricatorStringExportField.php
--- a/src/infrastructure/export/field/PhabricatorStringExportField.php
+++ b/src/infrastructure/export/field/PhabricatorStringExportField.php
@@ -8,7 +8,7 @@
       return $value;
     }
 
-    if (!strlen($value)) {
+    if (!phutil_nonempty_string($value)) {
       return null;
     }
 
diff --git a/src/infrastructure/log/PhabricatorProtocolLog.php b/src/infrastructure/log/PhabricatorProtocolLog.php
--- a/src/infrastructure/log/PhabricatorProtocolLog.php
+++ b/src/infrastructure/log/PhabricatorProtocolLog.php
@@ -24,7 +24,7 @@
   }
 
   public function didWriteBytes($bytes) {
-    if (!strlen($bytes)) {
+    if (!phutil_nonempty_string($bytes)) {
       return;
     }
 
@@ -33,7 +33,7 @@
   }
 
   public function didReadBytes($bytes) {
-    if (!strlen($bytes)) {
+    if (!phutil_nonempty_string($bytes)) {
       return;
     }
 
@@ -84,7 +84,7 @@
 
     $bytes = implode('', $bytes);
 
-    if (strlen($bytes)) {
+    if (phutil_nonempty_string($bytes)) {
       $this->writeBytes($mode, $bytes);
     }
   }
diff --git a/src/infrastructure/log/PhabricatorSSHLog.php b/src/infrastructure/log/PhabricatorSSHLog.php
--- a/src/infrastructure/log/PhabricatorSSHLog.php
+++ b/src/infrastructure/log/PhabricatorSSHLog.php
@@ -35,7 +35,7 @@
       }
 
       $client = getenv('SSH_CLIENT');
-      if (strlen($client)) {
+      if (phutil_nonempty_string($client)) {
         $remote_address = head(explode(' ', $client));
         $data['r'] = $remote_address;
       }
diff --git a/src/infrastructure/management/PhabricatorManagementWorkflow.php b/src/infrastructure/management/PhabricatorManagementWorkflow.php
--- a/src/infrastructure/management/PhabricatorManagementWorkflow.php
+++ b/src/infrastructure/management/PhabricatorManagementWorkflow.php
@@ -14,7 +14,7 @@
   }
 
   protected function parseTimeArgument($time) {
-    if (!strlen($time)) {
+    if (!phutil_nonempty_string($time)) {
       return null;
     }
 
diff --git a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
--- a/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
+++ b/src/infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php
@@ -2449,7 +2449,7 @@
     PhabricatorSearchNgrams $index,
     $value) {
 
-    if (strlen($value)) {
+    if (phutil_nonempty_string($value)) {
       $this->ngrams[] = array(
         'index' => $index,
         'value' => $value,
diff --git a/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php b/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php
--- a/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php
+++ b/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php
@@ -163,7 +163,7 @@
       }
 
       $out_message = $command_channel->read();
-      if (strlen($out_message)) {
+      if (phutil_nonempty_string($out_message)) {
         $out_message = $this->willReadData($out_message);
         if ($out_message !== null) {
           $io_channel->write($out_message);
@@ -201,7 +201,7 @@
 
   public function writeIORead($in_message) {
     $in_message = $this->willWriteData($in_message);
-    if (strlen($in_message)) {
+    if (phutil_nonempty_string($in_message)) {
       $this->commandChannel->write($in_message);
     }
   }
@@ -210,7 +210,7 @@
     if ($this->willWriteCallback) {
       return call_user_func($this->willWriteCallback, $this, $message);
     } else {
-      if (strlen($message)) {
+      if (phutil_nonempty_string($message)) {
         return $message;
       } else {
         return null;
@@ -222,7 +222,7 @@
     if ($this->willReadCallback) {
       return call_user_func($this->willReadCallback, $this, $message);
     } else {
-      if (strlen($message)) {
+      if (phutil_nonempty_string($message)) {
         return $message;
       } else {
         return null;
diff --git a/src/infrastructure/ssh/PhabricatorSSHWorkflow.php b/src/infrastructure/ssh/PhabricatorSSHWorkflow.php
--- a/src/infrastructure/ssh/PhabricatorSSHWorkflow.php
+++ b/src/infrastructure/ssh/PhabricatorSSHWorkflow.php
@@ -101,7 +101,7 @@
 
   public function getSSHRemoteAddress() {
     $ssh_client = getenv('SSH_CLIENT');
-    if (!strlen($ssh_client)) {
+    if (!phutil_nonempty_string($ssh_client)) {
       return null;
     }
 
diff --git a/src/infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php b/src/infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php
--- a/src/infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php
+++ b/src/infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php
@@ -99,7 +99,7 @@
     // "port" parameter.)
 
     if (!$ok) {
-      if (strlen($call_error)) {
+      if (phutil_nonempty_string($call_error)) {
         $message = pht(
           'mysqli->real_connect() failed: %s',
           $call_error);
@@ -180,7 +180,7 @@
     if (!$result) {
       $error_code = $this->getErrorCode($conn);
       if (!$error_code) {
-        if (strlen($err)) {
+        if (phutil_nonempty_string($err)) {
           $message = $err;
          } else {
           $message = pht(
diff --git a/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php b/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php
--- a/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php
+++ b/src/infrastructure/storage/lisk/PhabricatorLiskDAO.php
@@ -38,11 +38,13 @@
    * @task config
    */
   public static function getStorageNamespace() {
+    // Do not use phutil_nonempty_string() in the first check,
+    // since $namespace can be false, and we should not spawn an exception
     $namespace = end(self::$namespaceStack);
-    if (!strlen($namespace)) {
+    if (!is_string($namespace) || $namespace === '') {
       $namespace = self::getDefaultStorageNamespace();
     }
-    if (!strlen($namespace)) {
+    if (!phutil_nonempty_string($namespace)) {
       throw new Exception(pht('No storage namespace configured!'));
     }
     return $namespace;
@@ -194,7 +196,7 @@
       $class = substr($class, strlen($app));
     }
 
-    if (strlen($class)) {
+    if (phutil_nonempty_string($class)) {
       return $app.'_'.$class;
     } else {
       return $app;
@@ -295,7 +297,7 @@
     }
 
     if (function_exists('mb_detect_encoding')) {
-      if (strlen($encoding)) {
+      if (phutil_nonempty_string($encoding)) {
         $try_encodings = array(
           $encoding,
         );
diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php
--- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php
+++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php
@@ -371,7 +371,7 @@
           list($stdout, $stderr) = $future->read();
           $future->discardBuffers();
 
-          if (strlen($stderr)) {
+          if (phutil_nonempty_string($stderr)) {
             fwrite(STDERR, $stderr);
           }
 
@@ -416,7 +416,7 @@
   }
 
   private function writeData($data, $file, $is_compress, $output_file) {
-    if (!strlen($data)) {
+    if (!phutil_nonempty_string($data)) {
       return;
     }
 
diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php
--- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php
+++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php
@@ -67,7 +67,7 @@
     }
 
     $from = $args->getArg('from');
-    if (!strlen($from)) {
+    if (!phutil_nonempty_string($from)) {
       throw new PhutilArgumentUsageException(
         pht(
           'Specify namespace to rename from with %s.',
@@ -75,7 +75,7 @@
     }
 
     $to = $args->getArg('to');
-    if (!strlen($to)) {
+    if (!phutil_nonempty_string($to)) {
       throw new PhutilArgumentUsageException(
         pht(
           'Specify namespace to rename to with %s.',
diff --git a/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php b/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php
--- a/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php
+++ b/src/infrastructure/storage/patch/PhabricatorSQLPatchList.php
@@ -288,7 +288,7 @@
             case 'phase':
               $phase_name = $attr_value;
 
-              if (!strlen($phase_name)) {
+              if (!phutil_nonempty_string($phase_name)) {
                 throw new Exception(
                   pht(
                     'Storage patch "%s" specifies a "@phase" attribute with '.
diff --git a/src/infrastructure/util/PhabricatorHash.php b/src/infrastructure/util/PhabricatorHash.php
--- a/src/infrastructure/util/PhabricatorHash.php
+++ b/src/infrastructure/util/PhabricatorHash.php
@@ -197,7 +197,7 @@
         pht('HMAC-SHA256 keys must be strings.'));
     }
 
-    if (!strlen($key)) {
+    if (!phutil_nonempty_string($key)) {
       throw new Exception(
         pht('HMAC-SHA256 requires a nonempty key.'));
     }
diff --git a/src/infrastructure/util/password/PhabricatorPasswordHasher.php b/src/infrastructure/util/password/PhabricatorPasswordHasher.php
--- a/src/infrastructure/util/password/PhabricatorPasswordHasher.php
+++ b/src/infrastructure/util/password/PhabricatorPasswordHasher.php
@@ -388,7 +388,7 @@
    */
   public static function getCurrentAlgorithmName(PhutilOpaqueEnvelope $hash) {
     $raw_hash = $hash->openEnvelope();
-    if (!strlen($raw_hash)) {
+    if (!phutil_nonempty_string($raw_hash)) {
       return pht('None');
     }
 
diff --git a/src/view/control/AphrontTableView.php b/src/view/control/AphrontTableView.php
--- a/src/view/control/AphrontTableView.php
+++ b/src/view/control/AphrontTableView.php
@@ -135,7 +135,7 @@
 
     $col_classes = array();
     foreach ($this->columnClasses as $key => $class) {
-      if (strlen($class)) {
+      if (phutil_nonempty_string($class)) {
         $col_classes[] = $class;
       } else {
         $col_classes[] = null;
diff --git a/src/view/layout/AphrontSideNavFilterView.php b/src/view/layout/AphrontSideNavFilterView.php
--- a/src/view/layout/AphrontSideNavFilterView.php
+++ b/src/view/layout/AphrontSideNavFilterView.php
@@ -97,12 +97,12 @@
       ->setName($name)
       ->setType($type);
 
-    if (strlen($icon)) {
+    if (phutil_nonempty_string($icon)) {
       $item->setIcon($icon);
     }
 
 
-    if (strlen($key)) {
+    if (phutil_nonempty_string($key)) {
       $item->setKey($key);
     }
 
diff --git a/src/view/layout/PHUICurtainPanelView.php b/src/view/layout/PHUICurtainPanelView.php
--- a/src/view/layout/PHUICurtainPanelView.php
+++ b/src/view/layout/PHUICurtainPanelView.php
@@ -38,7 +38,7 @@
     $header = null;
 
     $header_text = $this->getHeaderText();
-    if (strlen($header_text)) {
+    if (phutil_nonempty_string($header_text)) {
       $header = phutil_tag(
         'div',
         array(
diff --git a/src/view/page/PhabricatorBarePageView.php b/src/view/page/PhabricatorBarePageView.php
--- a/src/view/page/PhabricatorBarePageView.php
+++ b/src/view/page/PhabricatorBarePageView.php
@@ -97,7 +97,7 @@
       if ($viewer) {
         $postprocessor_key = $viewer->getUserSetting(
           PhabricatorAccessibilitySetting::SETTINGKEY);
-        if (strlen($postprocessor_key)) {
+        if (phutil_nonempty_string($postprocessor_key)) {
           $response->setPostProcessorKey($postprocessor_key);
         }
       }
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -183,12 +183,12 @@
       $prefix = $this->getGlyph();
     } else {
       $application_name = $this->getApplicationName();
-      if (strlen($application_name)) {
+      if (phutil_nonempty_string($application_name)) {
         $prefix = '['.$application_name.']';
       }
     }
 
-    if (strlen($prefix)) {
+    if (phutil_nonempty_string($prefix)) {
       $title = $prefix.' '.$title;
     }
 
diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php
--- a/src/view/page/menu/PhabricatorMainMenuView.php
+++ b/src/view/page/menu/PhabricatorMainMenuView.php
@@ -333,7 +333,7 @@
 
 
     $wordmark_text = PhabricatorCustomLogoConfigType::getLogoWordmark();
-    if (!strlen($wordmark_text)) {
+    if (!phutil_nonempty_string($wordmark_text)) {
       $wordmark_text = PlatformSymbols::getPlatformServerName();
     }
 
diff --git a/src/view/phui/PHUIObjectItemView.php b/src/view/phui/PHUIObjectItemView.php
--- a/src/view/phui/PHUIObjectItemView.php
+++ b/src/view/phui/PHUIObjectItemView.php
@@ -873,7 +873,7 @@
       'class' => 'phui-oi-status-icon',
     );
 
-    if (strlen($label)) {
+    if (phutil_nonempty_string($label)) {
       $options['sigil'] = 'has-tooltip';
       $options['meta']  = array('tip' => $label, 'size' => 300);
     }
@@ -890,7 +890,7 @@
       'style' => 'background-image: url('.$handle->getImageURI().')',
     );
 
-    if (strlen($label)) {
+    if (phutil_nonempty_string($label)) {
       $options['sigil'] = 'has-tooltip';
       $options['meta']  = array('tip' => $label, 'align' => 'E');
     }
diff --git a/src/view/phui/PHUISegmentBarSegmentView.php b/src/view/phui/PHUISegmentBarSegmentView.php
--- a/src/view/phui/PHUISegmentBarSegmentView.php
+++ b/src/view/phui/PHUISegmentBarSegmentView.php
@@ -55,7 +55,7 @@
     $left = sprintf('%.2f%%', $left);
 
     $tooltip = $this->tooltip;
-    if (strlen($tooltip)) {
+    if (phutil_nonempty_string($tooltip)) {
       Javelin::initBehavior('phabricator-tooltips');
 
       $sigil = 'has-tooltip';
diff --git a/src/view/phui/PHUISegmentBarView.php b/src/view/phui/PHUISegmentBarView.php
--- a/src/view/phui/PHUISegmentBarView.php
+++ b/src/view/phui/PHUISegmentBarView.php
@@ -30,7 +30,7 @@
     require_celerity_resource('phui-segment-bar-view-css');
 
     $label = $this->label;
-    if (strlen($label)) {
+    if (phutil_nonempty_string($label)) {
       $label = phutil_tag(
         'div',
         array(