Php 使用strlen限制字符数

Php 使用strlen限制字符数,php,joomla,substr,if-statement,Php,Joomla,Substr,If Statement,我试图限制标题中出现的字符数 我不确定我在这里做错了什么(我是新手!),但标题显示完整,而“…”没有显示 非常感谢任何帮助 <? if ($params->get('itemid')) $itemid = '&Itemid='.$params->get('itemid'); else $itemid = ''; ?> <? $title = $event->title ?> <? $title = substr($title, 0, 20)

我试图限制标题中出现的字符数

我不确定我在这里做错了什么(我是新手!),但标题显示完整,而“…”没有显示

非常感谢任何帮助

<? if ($params->get('itemid')) $itemid = '&Itemid='.$params->get('itemid'); else $itemid = ''; ?>
<? $title = $event->title ?>
<? $title = substr($title, 0, 20); ?>
<? if (strlen($title) == 20) $title .= '...' ; ?>
<? if (KRequest::get('get.view', 'string') == 'events' || isset($module)) : ?>
    <h1 class="title" itemprop="name">
        <a href="<?=@route('option=joomla_component&view=event&id='.$event->id.$itemid)?>" itemprop="url"><?=$event->title?></a>
    </h1>
<? endif ?>


您不应该在输出中使用$title而不是$event->title吗?

您不应该在输出中使用$title而不是$event->title吗?

请参见2条注释。它应该能让它发挥作用

    <? 
    if ( $params->get('itemid') ) {
        $itemid = '&Itemid='. $params->get('itemid'); 
    else 
        $itemid = ''; 
    $title = $event->title; 
    if ( strlen( $title ) > 20 ) $title = substr( $title, 0, 17).'...';  // Need to add a substr
    if ( KRequest::get('get.view', 'string') == 'events' || isset( $module ) ) : ?>     
        <h1 class="title" itemprop="name">
            <a href="<?=@route('option=joomla_component&view=event&id='.$event->id.$itemid)?>" 
                itemprop="url">
                <?= $title; // note the change here ?>
            </a>
       </h1> 
    <? endif ?>

请参见2条注释。它应该能让它发挥作用

    <? 
    if ( $params->get('itemid') ) {
        $itemid = '&Itemid='. $params->get('itemid'); 
    else 
        $itemid = ''; 
    $title = $event->title; 
    if ( strlen( $title ) > 20 ) $title = substr( $title, 0, 17).'...';  // Need to add a substr
    if ( KRequest::get('get.view', 'string') == 'events' || isset( $module ) ) : ?>     
        <h1 class="title" itemprop="name">
            <a href="<?=@route('option=joomla_component&view=event&id='.$event->id.$itemid)?>" 
                itemprop="url">
                <?= $title; // note the change here ?>
            </a>
       </h1> 
    <? endif ?>

我不确定这是否能回答您的问题,但也许您应该尝试以下代码:

<?php
if ( $params->get( 'itemid' ) ) {
    $itemid = '&Itemid='.$params->get('itemid');
} else {
    $itemid = '';
}
$title = $event->title;
if ( strlen( $title ) >= 20 ) {
    $title = substr( $title, 0, 20 );
    $title .= '...';
}
if ( KRequest::get( 'get.view', 'string' ) == 'events' || isset( $module ) ) :
?>
<h1 class="title" itemprop="name">
    <a href="<?= @route( 'option=joomla_component&view=event&id=' . $event->id . $itemid ) ?>" itemprop="url"><?= $title ?></a>
</h1>
<?php
endif;
?>

主要问题是您正在转换$title变量并显示$event->title变量。此外,您正在寻找精确长度为20的字符串来添加“…”,但您应该将其添加到任何包含20个或更多字符的字符串中


我希望有帮助

我不确定这是否能回答您的问题,但也许您应该尝试以下代码:

<?php
if ( $params->get( 'itemid' ) ) {
    $itemid = '&Itemid='.$params->get('itemid');
} else {
    $itemid = '';
}
$title = $event->title;
if ( strlen( $title ) >= 20 ) {
    $title = substr( $title, 0, 20 );
    $title .= '...';
}
if ( KRequest::get( 'get.view', 'string' ) == 'events' || isset( $module ) ) :
?>
<h1 class="title" itemprop="name">
    <a href="<?= @route( 'option=joomla_component&view=event&id=' . $event->id . $itemid ) ?>" itemprop="url"><?= $title ?></a>
</h1>
<?php
endif;
?>

主要问题是您正在转换$title变量并显示$event->title变量。此外,您正在寻找精确长度为20的字符串来添加“…”,但您应该将其添加到任何包含20个或更多字符的字符串中



我希望有帮助

有什么问题吗?为什么新用户从不写问题是什么?你不必把每一行都用
标记。这只会使代码完全无法读取。您遇到了什么错误?您编辑的代码似乎是correct@Juhana:允许跳过
在每行的末尾。对于不了解它的功能的新手来说,它帮助很大;-))标题没有缩短到20个字符,而且“…”也没有出现。有什么问题吗?为什么新用户从不写问题是什么?你不必把每一行都用
标记。这只会使代码完全无法读取。您遇到了什么错误?您编辑的代码似乎是correct@Juhana:允许跳过
在每行的末尾。对于不了解它的功能的新手来说,它帮助很大;-))标题没有缩短到20个字符,并且“…”也没有出现。换句话说,您只是在读取的行中使用了错误的变量。。。itemprop=“url”>此答案更接近原始代码,但仍然正确,当前接受的答案更改了一些没有错误的内容。换句话说,您只是在读取的行中使用了错误的变量。。。itemprop=“url”>此答案更接近原始代码,但仍然正确,当前接受的答案更改了一些没有错误的内容。我不明白为什么这是一个接受的答案?如果你仔细查看代码。。。将永远不会添加,但所有标题将被截断为20个字符。行
$title=substr($title,0,20)
应该被删除,否则if(strlen($title)>20)
将永远不会为真。我最初没有看到substr在那里。我把它加了进去,完全没有注意到她把它放在上面的那一行。我修正了它。你可能应该把
substr($title,0,17)
也改成
substr($title,0,20)
。这考虑到了添加了“…”的3个字符是的,但原来的海报不是,所以这可能是故意的;)我不明白为什么这是一个公认的答案?如果你仔细查看代码。。。将永远不会添加,但所有标题将被截断为20个字符。行
$title=substr($title,0,20)
应该被删除,否则if(strlen($title)>20)
将永远不会为真。我最初没有看到substr在那里。我把它加了进去,完全没有注意到她把它放在上面的那一行。我修正了它。你可能应该把
substr($title,0,17)
也改成
substr($title,0,20)
。这考虑到了添加了“…”的3个字符是的,但原来的海报不是,所以这可能是故意的;)