PHP hatası htmlspecialchars

7 Cevap php

neden bu olur

$trader_details = array_walk($trader_details, 'htmlspecialchars');

Bu hatayı verir?

Severity: Warning
Message: htmlspecialchars() expects parameter 2 to be long, string given

afaik htmlspecialchars'ın sadece ayrı giriş dizeden isteğe bağlı parametreleri var? CodeIgniter'daki bu çalışma

thx

7 Cevap

array_walk geçirilen çağırma işlevi ikinci parametre dizi öğesinin önemli olmasını bekler:

Tipik olarak, funcname iki parametre alır. array parametresinin değeri ilk olmanın ve anahtar / index saniye.

Ama htmlspecialchars expects the second parameter to be the quoting style (typically specified by one of the ENT_* sabitleri tipi tamsayı).

array_map yerine deneyin. Sadece dizinin değerlerini kullanır.

array_walk Varsayılan 2 argüman geçer. Birinci, ikinci dizi öğe anahtar, dizi öğe değerdir. Bu ikinci argüman kullanmak için alıntı stilini tanımlayan bir tamsayı olmasını beklediğini htmlspecialchars'dan için ikinci argüman olarak dizi anahtarına geçmek için çalışıyor.

http://uk.php.net/array_walk diyor ki:

funcname
Typically, funcname takes on two parameters. The array parameter's value being the first, and the key/index second.

You're probably looking for aray_map. Also note that htmlspecialchars() uses iso-8859-1 as encoding by default. If your output is e.g. utf-8 encoded you have to pass that information as third parameter to htmlspecialchars. Otherwise the result may be wrong.
php 5.3:

$foo = array_map(
  function($x) { return htmlspecialchars($x, ENT_QUOTES, 'utf-8'); },
  $trader_details
);

Ben $ trader_details dizelerden oluşan bir dizi olduğunu varsayalım? htmlspecialchars () 'in ikinci parametresi kullanılacak özel quotestyle için, bir tamsayı türüdür.

Muhtemelen kullanmak istiyorum array_map. $ Trader_details iki boyutlu bir dizi ise, bu yüzden yapmak için çalışıyoruz görebilirsiniz onu gönderin.

array_walk, senin yöntem (htmlspecialchars'ın) 2 argüman iletir ilk geçerli dizi öğesinin değeri, ikinci key geçerli öğenin olduğunu.

bu nedenle, eğer

$trader_details = array('key' => 'value');

o zaman

$trader_details = array_walk($trader_details, 'htmlspecialchars');

aramalar

htmlspecialchars('value', 'key')

Ve bu htmlspecialchars'ın bir tamsayı olmak üzere, ikinci parametre gerektirir, yanlış - int $ öncelem_türü

Ben o amele bile, ne istediğinizi yapacağını sanmıyorum.

Htmlspecialchars () işlevi dizesini değiştirmek değil, sadece değişiklikleri ile yeni bir dize döndürür. Dizi yürüyüş herhangi bir etkisi olmazdı.

Hata açıktır ... array_walk ikinci argüman geri işlev çağrısı hakkında, ve fonksiyon 2 parametre olması gerekir. anahtar değeri ve ikinci için ilk ..