2013-06-30 212 views
1

在我的一個項目中,我有幾個上傳表單。由於我住在瑞典,我想將瑞典特殊字符編碼爲各自的HTML代碼,因此在顯示數據時編碼不會成爲問題。下面的代碼:str_replace不會替換特殊字符

function format_text($text){ 
    $chars = ['å','ä','ö','Å','Ä','Ö']; 
    $codes = ['å','ä','ö','&Aring','Ä','Ö']; 
    foreach($chars as $key => $value){ 
     $text = str_replace($value,$codes[$key],$text); 
    } 
    $text = str_replace("\r","\n",$text); 
    $text = preg_replace("!\n\n+!", "\n", $text); 
    $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); 
    $lines = explode("\n", $text); 
    foreach ($lines as $key => $line){ 
     $lines[$key] = "<p>{$line}</p>"; 
    } 
    $text = implode("\n", $lines); 
    return $text; 
} 

不管怎麼說,運行此功能後,我總是從htmlspecialchars,我已經因爲它永遠不會取代瑞典特殊字符的理解是一個空字符串。所以,我的問題是這樣的:爲什麼不用特殊的字符替換它的各自的HTML代碼,我該如何解決它?我正在使用PHP5.4。

+0

源代碼是否保存爲UTF-8? – Joni

+0

@Joni是的。 'file -bi file.php'輸出'text/x-php;字符集= UTF-8'。 – Psyberion

回答

3

如果使用htmlentities代替htmlspecialchars你就不需要str_replace

$text = htmlentities($text, ENT_QUOTES, 'UTF-8'); 

如果不工作,檢查文本在UTF-8編碼,而不是別的東西。

+0

這也行不通,我仍然收到一個空字符串在我的回報。所以我認爲輸入編碼是問題呢? – Psyberion

+0

我添加了'$ text = utf8_encode($ text);'在函數的最頂端,現在看起來工作正常!謝謝! – Psyberion