Почему моя функция набора текста не работает для нелатинских / азиатских символов? - PullRequest
0 голосов
/ 28 ноября 2009

Я убедил моего босса заняться набором текста с помощью PHP (PHP версии 5.2.8). И это то, что я получил до сих пор (установите кодировку символов на Unicode (UTF-8), если вы видите неправильно введенные японские символы):

демонстрационная страница на моем личном сайте

Обычно, если вы скопируете и вставите латинский образец абзаца в текстовое поле и нажмете кнопку, все работает хорошо, вы можете убедиться в этом, вставив результат в Блокнот для проверки (хотя тот факт, что я ничего не сделал использовать дефисы для обозначения слов, разделенных новыми строками).

Однако, когда речь идет о нелатинских / азиатских символах, ничего не печаталось. Я не получил сообщение об ошибке, просто ничего не вижу ...

Вот мой код:

<?php
$words = typesetWords($_POST['words']);
echo json_encode(array('feedback' => $words));

function typesetWords($words, $lineLength = 70)
{
    try
    {
        $result = '';
        $paragraphs = explode("\n\n", $words);
        foreach($paragraphs as $paragraph)
        {
            $paragraph = str_replace("\n", "", $paragraph);
            $length = strlen($paragraph);
            $numberOfLines = intval($length / $lineLength);
            $tmp = '';
            if($numberOfLines > 0)
            {
                for($i = 0; $i < $numberOfLines; $i++)
                    $tmp .= substr($paragraph, $i * $lineLength, $lineLength)."\n";
                $tmp .= substr($paragraph, -1 * ($length % $lineLength))."\n\n";
                $result .= $tmp;
            }
            else $result .= $paragraph."\n\n";
        }
    }
    catch(Exception $e)
    {
        return $e->getMessage();
    }
    return $result;
}

?>

Я попытался вернуть то, что было отправлено формой, обратно, и я без проблем увидел образец параграфа на японском языке. Поэтому я считаю, что одна из функций библиотеки PHP должна иметь вызвал ошибку, но я не мог сказать, какой и как это исправить ...

Большое спасибо заранее!

1 Ответ

0 голосов
/ 28 ноября 2009

strlen () вернет количество символов в строке, отформатированной для ANSI / ASCII, а не UTF-8. Попробуйте вместо mb_strlen () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...