如何在非英文字符上使用子字符串?

时间:2014-08-22 05:04:11

标签: php substr htmlspecialchars

我有一个小网站,我显示帖子标题的搜索结果, 一些标题长达255个字符,并且在html表格中显示这些标题时,表格的行中断即不显示正确,所以我使用substr php函数修剪标题,使其适合表格行。

对于英文标题,它工作得很好,但对于非英文标题,它显示空白区域,即修剪所有内容。

我正在使用substr这样的

<a href="<? echo $link; ?>" class="strong"><? echo htmlspecialchars(substr($row['title'],0,70)); ?></a>

那么如何制作70字符的非英文标题?

3 个答案:

答案 0 :(得分:3)

您应该根据UTF-8的字符数使用multi-byte safe substr()操作:

mb_substr();

http://php.net/manual/en/function.mb-substr.php

答案 1 :(得分:0)

http://php.net/manual/de/function.wordwrap.php

这可能是因为substr不是多字节保存功能。

您可以使用mb_substr()代替 - “http://de1.php.net/manual/de/function.mb-substr.php

或尝试使用“wordwrap”功能,因为它只是用于剪切字符串:

<? echo htmlspecialchars(wordwrap($row['title'], "70", "", true)); ?>

另一种可能性是,只使用没有substr()的htmlspecialchars()会发生这种情况吗?但这只是一个建议,因为我的其他两个想法没有帮助。

答案 2 :(得分:0)

尝试使用我从DataLife Engine CMS获得的这个自定义功能

function dle_substr($str, $start, $length, $charset = "utf-8" ) {

    if ( strtolower($charset) == "utf-8") return iconv_substr($str, $start, $length, "utf-8");
    else return substr($str, $start, $length);

}
像这样

<a href="<? echo $link; ?>" class="strong"><? echo  htmlspecialchars(dle_substr($row['title'],0,70)); ?></a>