2011-11-30 111 views
0

我需要一個函數來清理字符串的特殊字符。我想這HTML字符轉換像 <br />&lt;br /&gt;使用php將特殊字符轉換爲html代碼

我想要的東西轉換,如:•1/2,」爲HTML代碼。

這是我目前使用的功能,但它不會出現與分數來工作..

function cleanText($str){ 

$str = str_replace("Ñ" ,"&#209;", $str); 
$str = str_replace("ñ" ,"&#241;", $str); 
$str = str_replace("ñ" ,"&#241;", $str); 
$str = str_replace("Á","&#193;", $str); 
$str = str_replace("á","&#225;", $str); 
$str = str_replace("É","&#201;", $str); 
$str = str_replace("é","&#233;", $str); 
$str = str_replace("ú","&#250;", $str); 
$str = str_replace("ù","&#249;", $str); 
$str = str_replace("Í","&#205;", $str); 
$str = str_replace("í","&#237;", $str); 
$str = str_replace("Ó","&#211;", $str); 
$str = str_replace("ó","&#243;", $str); 
$str = str_replace("「","&#8220;", $str); 
$str = str_replace("」","&#8221;", $str); 

$str = str_replace("‘","&#8216;", $str); 
$str = str_replace("’","&#8217;", $str); 
$str = str_replace("—","&#8212;", $str); 

$str = str_replace("–","&#8211;", $str); 
$str = str_replace("™","&trade;", $str); 
$str = str_replace("ü","&#252;", $str); 
$str = str_replace("Ü","&#220;", $str); 
$str = str_replace("Ê","&#202;", $str); 
$str = str_replace("ê","&#238;", $str); 
$str = str_replace("Ç","&#199;", $str); 
$str = str_replace("ç","&#231;", $str); 
$str = str_replace("È","&#200;", $str); 
$str = str_replace("è","&#232;", $str); 
$str = str_replace("•","&#149;" , $str); 

$str = str_replace("¼","&#188;" , $str); 
$str = str_replace("½","&#189;" , $str); 
$str = str_replace("¾","&#190;" , $str); 
$str = str_replace("½","&#189;" , $str); 

return $str; 

} 
+0

如果$ str中的數據編碼在PHP文件所在的不同編碼和/或代碼頁中,則該字符將不匹配。你可以很容易地檢查:如果是這種情況,'echo「½」;'應該在瀏覽器中顯示爲不同的字符。 – GolezTrol

+1

*「我想將諸如'''','½','''轉換爲html代碼」* - 爲什麼?這不應該是必要的。 – Tomalak

+3

當你在一個地方看到很多'str_replace's時,你應該認爲這可能是錯誤的。 'utm-8'中的'htmlentities'爲 –

回答

4

您可以使用ENT_SUBSTITUTE屬性與htmlentities替換整個功能。除了正確工作之外,它的執行速度會更快。

注:ENT_SUBSTITUTE從PHP 5.4起可用。

2

猜猜該看看htmlentities PHP函數及其選項了。

基本上,你可以取代你的整個功能:

$str = htmlentities($str); 

這將是也有很多更有效率。

如果您需要特殊處理(特別是ENT_SUBSTITUTE),請務必查看該功能的可選參數。

$str = htmlentities($str, ENT_SUBSTITUTE); 
+0

每次我編輯我的問題以改進它時,您似乎都大致同時進行相同的編輯。有時候,偉大的思想家都會這麼想:) –

+0

這就是StackOverflow中的精神! ; ) 保持良好的工作! – Macmade

2

試試這個,我用這個功能來任何/所有內容轉換爲Unicode:

class unicode_replace_entities { 
public function UTF8entities($content="") { 
    $contents = $this->unicode_string_to_array($content); 
    $swap = ""; 
    $iCount = count($contents); 
    for ($o=0;$o<$iCount;$o++) { 
     $contents[$o] = $this->unicode_entity_replace($contents[$o]); 
     $swap .= $contents[$o]; 
    } 
    return mb_convert_encoding($swap, "UTF-8"); //not really necessary, but why not. 
} 
public function unicode_string_to_array($string) { //adjwilli 
    $strlen = mb_strlen($string); 
    while ($strlen) { 
     $array[] = mb_substr($string, 0, 1, "UTF-8"); 
     $string = mb_substr($string, 1, $strlen, "UTF-8"); 
     $strlen = mb_strlen($string); 
    } 
    return $array; 
} 
public function unicode_entity_replace($c) { //m. perez 
    $h = ord($c{0}); 
    if ($h <= 0x7F) { 
     return $c; 
    } else if ($h < 0xC2) { 
      return $c; 
     } 

    if ($h <= 0xDF) { 
     $h = ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F); 
     $h = "&#" . $h . ";"; 
     return $h; 
    } else if ($h <= 0xEF) { 
      $h = ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6 | (ord($c{2}) & 0x3F); 
      $h = "&#" . $h . ";"; 
      return $h; 
     } else if ($h <= 0xF4) { 
      $h = ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12 | (ord($c{2}) & 0x3F) << 6 | (ord($c{3}) & 0x3F); 
      $h = "&#" . $h . ";"; 
      return $h; 
     } 
} 
} 

$oUnicodeReplace = new unicode_replace_entities(); 

$oUnicodeReplace->UTF8entities($string); 

介意你將所有內容轉換,但它會照顧奇怪的人物,否則...不是我自己的腳本,但我不知道我在哪裏找到它。

+0

您需要添加'$ this'類的定義,否則答案有點無用;) – hakre