Codeigniter - 字符限制器无法正常工作

时间:2015-02-23 02:24:31

标签: php codeigniter

我在标题中回显用户的第一个名字。我有一个带有很多字符的测试名字。 例如:

$firstname = "asdfasdfasdfjkljldkafjsddfjakdsjflaksjdfl"

我正在做

 <?php  $first_name = character_limiter($first_name, 10);  
echo $firstname;?>

但它没有用。它显示所有字符(asdfasdfasdfjkljldkafjsddfjakdsjflaksjdfl),而不是前10个字符。

我只想看到前十名的追逐者。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

在使用$firstname函数

时,使用$first_name作为第一个参数而不是character_limiter()(最初不包含任何内容)
$firstname = "asdfasdfasdfjkljldkafjsddfjakdsjflaksjdfl";
$first_name = character_limiter($firstname, 10); // limits $firstname to 10 chars and outputs to $first_name
echo $first_name;

如果您在发布问题时出现拼写错误,则问题可能是在Codeigniter中加载文本助手,这是使用此功能(CI Text Helper)所必需的。 / p>

您可以通过在 application / config / autoload.php 中指定Text Helper来加载Text Helper:

$autoload['helper'] = array('text');

或者通过在这样的Controller函数中专门加载它:

$this->load->helper('text');

更新:

Codeigniter维护&#34; 单词的完整性,因此字符数可能略多于或少于您指定的内容&#34; (参考 CI Text Helper

让我通过一个例子向您解释:

$firstname = "asdfasdfasdfjkljldkafjsddfjakdsjflaksjdfl"; //contains only single word
$first_name = character_limiter($firstname, 10);

在这里,CI尝试将$firstname限制为10个字符,但由于它遇到一个单词,它不会尝试打破它而是输出直到单词的结尾。

现在说你曾经使用过,

$firstname = "asdfa sdfasdfj kljldkafjsddfjakdsjflaksjdfl sdjbfsdufb";

这包含三个单词,因此输出将为 asdfa sdfasdfj ...

请注意,这里有限的字符串也包含10个以上的字符,但由于CI试图保持字的完整性,所以它不会破坏最后一个字。

如果你需要严格限制输入字符串,那么你必须使用 Hudixt 所描述的内置php函数 substr()

答案 1 :(得分:0)

您也可以使用substr()来实现此目的。如果您想在10个字符后添加...,请使用strlen()的帮助。使用以下代码

    <?php 
if(strlen($first_name)>10){
 $first_name = substr($first_name,0, 10)."...";  
}
else{
 $first_name = substr($first_name,0, 10);  
}
    echo $first_name;
?>

希望这有助于你

答案 2 :(得分:0)

试试这个,它会解决您的问题。

 $this->load->helper('text');
    $string = "your text here";
    $string = character_limiter($string, 10);
    echo $string;

输出:你的文字......

答案 3 :(得分:0)

character_limiter()函数不适用于较长的单词以防止断字和/或扭曲含义。 根据codeigniter文档,它不会试图打破长字来维护其完整性。 根据文件 character_limiter

  

将字符串截断为指定的字符数。它保持单词的完整性,因此字符数可能略多于或少于您指定的数量。

但是,codeigniter并不会阻止你限制确切的字符,而是在注释中提到

  

如果您需要截断到确切的字符数,请参阅下面的ellipsize()函数。

因此您可以使用character_limiter()功能代替ellipsize(),而且它会完全相同。

希望有所帮助。