index.phpで以下のコード
index.php
<DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>esフォーム作成</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div> <pre> <?php require_once("util.php"); $myCode = "<h2>テスト</h2>"; $myArray = ["a"=>"<p>赤</p>", "b"=>"<script>alert('hello')</script>"]; echo '$myCodeの値 :',es($myCode); echo "\n\n"; echo '$myArrayの値 :'; print_r(es($myArray)); ?> </pre> </div> </body> </html>
呼出すファイル[util.php]
util.php
<?php //XSS対策のためのHTMLエスケープ function es($data, $charset){ //$dataが配列のとき if(is_array($data)){ //再帰呼出し return array_map(__METHOD__, $data); } else{ //HTMLエスケープを行う return htmlspecialchars($data, ENT_QUOTERS,$charset); } }
として、ファイルを実行すると、
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つの場合でも処理できる。と書いてあります。
しかし、エラーがでます。
どなたか教えてくださる方がいればよろしくお願いします。
まだ回答がついていません
会員登録して回答してみよう