2017-05-31 24 views
1

私は、エンティティコードをHTMLに私の配列内の特殊文字を変換しようとしています:これは私のヘルパー配列であるPHP特殊文字

を:

'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

ようにhtmlentitiesの2番目のパラメータ「フラグ」を使用する必要があります。

$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ようなものを作るために機能を編集する必要がありますどのように働いていたaswell必要なすべての表示されませんでした: 'メニュー::変換(「私の名前?」);' をそして出力として取得する 'my name ?' – utdev

+0

メソッドを使用しないでください。 'htmlentities($ str、ENT_QUOTES | ENT_HTML5)' @utdevを呼び出してください。私は、これがたくさんの場所で呼び出された場合、あなたはメソッドを使うことができると思います。 –

2

あなたがENT_QUOTESENT_HTML5flagsを使用する必要があり、この

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

ENT_HTML5私はENT_QUOTESが – utdev

0

注:私は、エンティティのリストをチェックしていなかったので、すべての文字が使用可能な翻訳を持っていることに気づきませんでした。私は答えを残していますが、もしそれが他の人のリストを使って他の人を助けることができるならば。


docs(強調鉱山)から:

HTML文字エンティティを持っているすべての文字は、これらのエンティティに翻訳されている同等物。

はまた

  • get_html_translation_table()を参照してください - あなたがターゲットエンコーディングとしてHTML-ENTITIESを使用してmb_convert_encoding()とのより良い結果を持っている可能性はhtmlspecialcharsとにhtmlentities他の状況で

で使用される変換テーブルを返します。問題は、エンティティに明白なパターンがないことです(ほとんどがHTMLで特別な意味を持たない基本的なUS-ASCII文字であるため、通常のHTMLエンティティに変換する必要はありません理由)。したがって、2つのオプションが残っています:

  • たとえば、次のようなヘルプを使用して数値エンティティを生成します。 preg_replace_callback()およびpack()
  • 完全なエンティティリストをハードコードし、置換の完了をstrtr()で取得します。