2009-11-28 19 views
0

我已經說服了我的老闆使用PHP(PHP版本5.2.8)進行排版。 這是我走到這一步(設置字符編碼爲Unicode(UTF-8)如果你看到misrendered日文字符):爲什麼我的排版功能不適用於非拉丁/亞洲字符?

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

>

我試圖返回的內容被髮送?表格直接返回,而且我確實看到日文示例段沒有問題。所以我認爲其中一個PHP庫函數必須有 導致錯誤,但我不知道哪一個以及如何修復它...

非常感謝提前!

回答

0

strlen()將返回格式爲ANSI/ASCII的字符串中的字符數,而不是UTF-8。改爲嘗試mb_strlen()

+0

感謝您的提示!我會去檢查。 – 2009-11-28 05:11:41

+0

編號mb_strlen()不會解決問題。 textarea仍然沒有任何東西。 – 2009-11-28 05:16:45

+0

哦。我知道了。將mb_interal_encoding設置爲UTF-8並將所有字符串函數替換爲UTF-8安全對等方後,一切正常! 感謝您的提示! – 2009-11-28 05:31:19