index.phpで以下のコード
index.php
1<DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <title>esフォーム作成</title> 6 <link rel="stylesheet" type="text/css" href="style.css"> 7 </head> 8 9 <body> 10 <div> 11<pre> 12 <?php 13 require_once("util.php"); 14 15 $myCode = "<h2>テスト</h2>"; 16 $myArray = ["a"=>"<p>赤</p>", "b"=>"<script>alert('hello')</script>"]; 17 18 echo '$myCodeの値 :',es($myCode); 19 echo "\n\n"; 20 21 echo '$myArrayの値 :'; 22 23 print_r(es($myArray)); 24 ?> 25</pre> 26 </div> 27 </body> 28 29 </html> 30
呼出すファイル[util.php]
util.php
1<?php 2//XSS対策のためのHTMLエスケープ 3function es($data, $charset){ 4 //$dataが配列のとき 5 if(is_array($data)){ 6 //再帰呼出し 7 return array_map(__METHOD__, $data); 8 } 9 else{ 10 //HTMLエスケープを行う 11 return htmlspecialchars($data, ENT_QUOTERS,$charset); 12 } 13}
として、ファイルを実行すると、
Fatal error: Uncaught ArgumentCountError: Too few arguments to function es(), 1 passed in C:\xampp\htdocs\index.php on line 18 and exactly 2 expected in C:\xampp\htdocs\util.php:3 Stack trace: #0 C:\xampp\htdocs\index.php(18): es('<h2>\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88</...') #1 {main} thrown in C:\xampp\htdocs\util.php on line 3
とでてきます。
エラーの意味としては、es()の引数が2個を想定しているのにも関わらず、呼出し側のファイルで一つしか引数を渡してないということだと考えています。
このコードはある参考書の例題なのですが、その説明としては、array_map()を使って再起呼び出しをしているから、引数が1つの場合でも処理できる。と書いてあります。
しかし、エラーがでます。
どなたか教えてくださる方がいればよろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。