PHP检查字符串是否以无标题的引号结尾

函数 _hasEndQuote GoodText.cn的目的是检查一个字符串(或称为“token”)是否以非转义的双引号(")结尾。这里,它处理了一些特殊情况,包括空字符串、单个双引号字符以及转义的双引号。

以下是该函数的逐步解释:

  1. 获取字符串长度:首先,它使用 strlen 函数获取 $token 的长度,并将其存储在 $len 变量中。
  2. 检查空字符串:如果 $len 为 0(即字符串为空),则函数返回 false,因为空字符串不以任何字符(包括双引号)结尾。
  3. 检查单个双引号字符:如果 $len 为 1 并且 $token 等于 ",则函数返回 true,因为单个双引号字符本身就是其自己的结尾。
  4. 检查包含多个字符的字符串
    • 如果 $len 大于 1,函数进入一个 while 循环,该循环检查字符串的最后一个字符是否是一个双引号,并且其前一个字符(倒数第二个字符)是否也是一个双引号。如果是这样,那么这意味着最后一个双引号是被转义的(即 ""),并且函数从字符串末尾剥离这两个字符,并减少 $len 的值。
    • while 循环继续执行,直到字符串不以两个连续的双引号结尾或 $len 不再大于 1。
    • 如果循环结束后 $len 为 0,这意味着原始字符串只包含转义的双引号,因此函数返回 false
    • 如果 $len 不为 0,函数检查剩余字符串的最后一个字符是否是一个双引号。如果是,则返回 true,因为字符串以非转义的双引号结尾。
    • 如果最后一个字符不是双引号,则返回 false,因为字符串不以非转义的双引号结尾。

这个函数在处理包含转义双引号的字符串时特别有用,它可以正确地确定字符串是否以非转义的双引号结尾。这在解析 CSV 或其他以引号括起的文本文件时特别重要,因为这些文件可能会使用转义的双引号来表示字符串内的引号字符。

 

function _hasEndQuote($token) {
 $len = strlen($token);
 if ($len == 0) return false;
 elseif ($len == 1 and $token == '"') return true;
 elseif ($len > 1) {
  while ($len > 1 and $token[$len-1] == '"' and $token[$len-2] == '"') { // there is an escaped quote at the end
   $len -= 2; // strip the escaped quote at the end
  }
  if ($len == 0) return false; // the string was only some escaped quotes
  elseif ($token[$len-1] == '"') return true; // the last quote was not escaped
  else return false; // was not ending with an unescaped quote
 }
}



创建日期是 2024-05-19 06:12:32am