Replace написав:Варіант з вбудованими функціями:
substr($string, 0, strrpos(substr($string, 0, $n), " ")
 Неправильне рішення. По-перше синтаксична помилка бо не вистачає однієї закриваючої дужки, по-друге функція завжди обрізає до першого пробіла у рядку з 0 до $n символів. А якщо після цього пробіла і до $n символів ще поміститься слово?
function substring ($string, $n) {
    return substr($string, 0, strrpos(substr($string, 0, $n), " "));
}
    $str = 'php is hypertext'; // 16 symbols
    echo substring($str, 10000)."<br/>"; // php is
        echo substring($str, 16)."<br/>"; // php is
       /*
Має бути
echo substring($str, 16)."<br/>"; // php is hypertext
*/