2017-05-31 37 views
1

我想要的特殊字符轉換成我的數組爲HTML實體代碼:PHP特殊字符的HTML實體代碼

這是幫助我的數組:

'specialChars' => [ 
    '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', 
    ',', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', 
    ']', '^', '_', '`', '{', '|', '}', '§', '©', '¶' 
] 

這是函數:

public static function convert($specialChars = []) 
    { 
     $htmlEntityArray = []; 

     if(count($specialChars) == 0) 
     { 
      $specialChars = Config::get('constants.specialChars'); // gets the special char from the helper array 
     } 

     foreach ($specialChars as $key => $value) 
     { 
      $htmlEntityArray = array_map("htmlentities", $specialChars); 
     } 

     return $htmlEntityArray; 
    } 

但是,只有返回我這陣,它成功地將一些,有些不是:

array:32 [▼ 
    0 => "!" 
    1 => "&quot;" 
    2 => "#" 
    3 => "$" 
    4 => "%" 
    5 => "&amp;" 
    6 => "'" 
    7 => "(" 
    8 => ")" 
    9 => "*" 
    10 => "+" 
    11 => "," 
    12 => "/" 
    13 => ":" 
    14 => ";" 
    15 => "&lt;" 
    16 => "=" 
    17 => "&gt;" 
    18 => "?" 
    19 => "@" 
    20 => "[" 
    21 => "\" 
    22 => "]" 
    23 => "^" 
    24 => "_" 
    25 => "`" 
    26 => "{" 
    27 => "|" 
    28 => "}" 
    29 => "&sect;" 
    30 => "&copy;" 
    31 => "&para;" 
] 
+1

爲什麼不使用php的['htmlentities'](http://php.net/manual/en/function.htmlentities.php)或['htmlspecialchars'](http://php.net/manual /en/function.htmlspecialchars.php)功能,這是做到這一點 – Jelmergu

+1

重新發明我看到的車輪? – Akintunde007

回答

3

您必須使用ENT_QUOTESENT_HTML5flags

$specialChars = [ 
    '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', 
    ',', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', 
    ']', '^', '_', '`', '{', '|', '}', '§', '©', '¶' 
]; 

var_export(array_map(function ($str) { return htmlentities($str, ENT_QUOTES | ENT_HTML5); }, $specialChars)); 

這將返回:

array (
    0 => '&excl;', 
    1 => '&quot;', 
    2 => '&num;', 
    3 => '&dollar;', 
    4 => '&percnt;', 
    5 => '&amp;', 
    6 => '&apos;', 
    7 => '&lpar;', 
    8 => '&rpar;', 
    9 => '&ast;', 
    10 => '&plus;', 
    11 => '&comma;', 
    12 => '&sol;', 
    13 => '&colon;', 
    14 => '&semi;', 
    15 => '&lt;', 
    16 => '&equals;', 
    17 => '&gt;', 
    18 => '&quest;', 
    19 => '&commat;', 
    20 => '&lbrack;', 
    21 => '&bsol;', 
    22 => '&rsqb;', 
    23 => '&Hat;', 
    24 => '&lowbar;', 
    25 => '&grave;', 
    26 => '&lbrace;', 
    27 => '&vert;', 
    28 => '&rcub;', 
    29 => '&sect;', 
    30 => '&copy;', 
    31 => '&para;', 
) 
+0

感謝這個工作至今 – utdev

+0

我怎麼會需要編輯功能,使這樣的事情avaible: '菜單::轉換(「?我的名字」);' 作爲輸出 '我的名字?' – utdev

+0

不要使用方法,只需調用'htmlentities($ str,ENT_QUOTES | ENT_HTML5)'@utdev。如果在很多地方調用這個方法,我想你可以使用一個方法。 –

2

你必須使用ヶ輛的第二個參數「旗幟」這樣

$htmlEntityArray = array_map(function($char) { 
    return htmlentities($char, ENT_QUOTES | ENT_HTML5); 
}, $specialChars); 
+1

ENT_HTML5沒有表現出我所需要的ENT_QUOTES藏漢 – utdev

0

注:我沒有檢查實體列表,因而沒有注意到,所有字符都可用的翻譯。儘管如此,如果能夠幫助其他人使用不同的人物列表,我仍然會留下答案。


docs(重點煤礦):

具有HTML字符實體的所有字符等同被翻譯成這些實體。

而且

在其他情況下使用的轉換表,你可以有一個更好的結果,使用HTML-ENTITIES作爲目標編碼mb_convert_encoding()。問題在於你的實體中沒有明顯的模式(其中大多數是基本的US-ASCII字符,它們在HTML中沒有任何特殊的含義,因此不需要轉換爲任何通常的HTML實體原因)。所以你有兩種選擇: