为什么我的排版功能对非拉丁/亚洲字符不起作用?

时间:2009-11-28 04:51:59

标签: php utf-8

我已经说服我的老板使用PHP(PHP版本5.2.8)进行排版。 这是我到目前为止所得到的(如果您看到错误的日文字符,则将字符编码设置为Unicode(UTF-8)):

demo page at my personal website

基本上,如果你将拉丁样本段落复制并粘贴到textarea并单击按钮,一切运行正常,你可以通过将结果粘贴到记事本中进行检查来验证(尽管事实上我没有做任何事情)使用连字符表示由新行分隔的单词。)

然而,当它带有非拉丁/亚洲字符时,没有任何内容被打印出来。我没有收到任何错误信息,根本看不到任何东西......

以下是我的代码:

<?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;
}

&GT;

我试图直接返回表单发送的内容,我确实看到了日文示例段落没有问题。所以我认为其中一个PHP库函数必须具备 导致错误,但我无法分辨哪一个以及如何解决它......

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

strlen()将返回格式为ANSI / ASCII但不是UTF-8的字符串中的字符数。请改为mb_strlen()