我有此功能来截断比指定参数更长的字符串。 它可以处理从现在开始传递给它的所有字符串,但是当我测试以下字符串时遇到问题:

Fifth post is the worst ever.Dont you believe?Just read it!

它说:

"Undefined variable:string"  

函数是:

public function limitString($message,$position,$limitString)
{

    if(strlen($message)<$position)
    $string=$message;

    else
    {
    $post = substr($message,$position,1); // Find what is the last character displaying.

    if($post !=" ")
    {

        for($i=$position-1;$i>0;$i--)
        {
          $post = substr($message,$i,1);
          if ($post ==" ")
          {
            break;
          }
        }

        $string=substr($message,0,$i).$limitString;
    }

    }

    return $string; 
}

这就是我所说的:

limitString($string,33,"...")

我哪里错了?

解决:你们让我注意到返回的$ string值未在外部定义

if($post!==' ')

因此,我添加了一条else语句,将$ string定义为:

$string=substr($message,0,$position).$limitString;

谢谢卢卡

#1楼 票数:2 已采纳

问题在于,在某些情况下,永远不会定义$string变量,如:

public function limitString($message,$position,$limitString)
{

if(strlen($message)<$position)
$string=$message;

else
{
$post = substr($message,$position,1); // Find what is the last character displaying.
//$string is not defined here.
if($post !=" ")
{

    for($i=$position-1;$i>0;$i--)
    {
      $post = substr($message,$i,1);
      if ($post ==" ")
      {
        break;
      }
    }

    $string=substr($message,0,$i).$limitString;
}
    //$string is not defined here
}

return $string; 
}

解决方案是在函数顶部定义$ string:

$string = "";

这样您的return语句将始终返回某些内容

#2楼 票数:1

当以下测试失败时,将发生这种情况:

if(strlen($message)<$position)

if($post !=" ")

$ string仅在这两个块中定义。 要解决此问题,您应该在条件语句之前定义$ string:

$string=$message;
if(strlen($message)<$position) {
    ....

  ask by luca translate from so

未解决问题?本站智能推荐:

2回复

字符串在PHP中被随机截断

我正在开发的PHP脚本有问题。 有时(很少,但是会发生)字符串无法正确连接,因为在此过程中字符串的片段会丢失,从而导致字符串被随机截断。 这是一个示例,它是收集订单信息并将其通过电子邮件发送给客户端的代码的一部分(这就是为什么我被迫使用html表的原因)。 该代码工作正常。 不
3回复

截断字符串,但删除字符串的中间而不是结束

我想出了这个函数,它将给定的字符串截断为给定的字数或给定的字符数,无论是更短的。 然后,在字符数或字数限制之后切断所有内容后,它会在字符串后附加一个“...”。 如何从字符串中间删除字符/单词并用'...'替换它们而不是用'...'替换末尾的字符/单词? 这是我的代码: 例
1回复

使用PHP截断直到字符串中第n个字符之前的确切符号

假设我们有以下示例字符串: 我们有fname,lname,年龄和年份,薪水,nancy,davolio,erin,borakova,tony,raphael等词 我需要做的是,获取字符串的一部分,直到最后一次出现,定界符和结果必须最多70个字符。 因此,对于示例文本,结果
6回复

截断UTF-8字符串以适合PHP中的给定字节数

bytes. 假设我们有一个UTF-8字符串$s ,我们需要缩短它,以便它可以存储在个字节中。 bytes could mess it up. 盲目地将其截断为个字节可能会搞砸它。 但解码它以找到字符边界是一种拖累。 有一个整洁的方式吗? [编辑20100414]除了S.Mark的答
2回复

合并两个正则表达式来截断字符串中的单词

我试图提出以下函数将字符串截断为整个单词(如果可能,否则它应截断为字符): 以下是一些测试: 它们都按原样工作,但是如果我删除第二个preg_replace()我得到以下内容: Iñtërnâtiônàlizætiøn_and_then_the_quick_brown_
3回复

在PHP中缩短/截断UTF8字符串

我需要一个很好的快速函数,通过UTF8支持将字符串缩短到设定的长度。 在末尾添加尾随'...'是一个加号。 有人可以帮忙吗?
3回复

如何在PHP中截断UTF8字符串?

我的PHP代码中有一些字符串,如果它们太长则需要被截断。 例如,如果文本是这样的: 嗨,我想告诉你这是多么美妙。 它将取代它: 嗨,我想...... 为此,我做了一个简单的substr 。 问题是在UTF8中,一些字符实际上是两个字符长。 我在中间切
2回复

如何在PHP中截断字符串的一部分

例如我有一个像 <p> Quis vel accusantium libero. Suscipit officiis culpa <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAA