

APIを利用して誤字を見つけるものを作りたいのですが、行き詰ってしまったので質問させてもらいます。  
とりあえず現在はエラーがでないようにしたいです。

**表示されるメッセージ:**

[code]

    Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\卒研\sotuken.php on line 24
    
[/code]

**現状のコード:**

[code]

    <?php
    $post_flag = false;
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
      $post_flag = true;
      $url = "https://api.a3rt.recruit-tech.co.jp/proofreading/v2/typo";
      $apikey = "xxxxxxxxxx";
      $sentence = str_replace(array("\r\n", "\r", "\n", " ", "　"), "", @$_POST['text']); //入力文章
      $sensitivity = @$_POST['sensitivity']; //チェック感度（low、medium、high）
      $postdata = array(
        "apikey" => $apikey,
        "sentence" => $sentence,
        "sensitivity" => $sensitivity
      );
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);  
      $curl = curl_exec($ch);
      curl_close($ch);
      $results = json_decode($curl, true);
    
      $alerts = @$results["alerts"] ?: '';
    //クロスサイトスクリプティング(XSS)の脆弱性を防止
      $checked_sentence = htmlspecialchars($results['checkedSentence'], ENT_QUOTES);
      $checked_sentence = str_replace(array('&lt;&lt;'), '<span class="error">', $checked_sentence);
      $checked_sentence = str_replace(array('&g t;&gt;'), '</span>', $checked_sentence);
    
      function get_alert_text ($score){
        $text = '';
        if ($score > 0.7) {
          $text = "誤字の可能性: 大";
        }
        elseif ($score > 0.3) {
          $text = "誤字の可能性: 中";
        }
        else {
          $text = "誤字の可能性: 小";
        }
        return $text;
      }
    
      $status_code = array(
        "0" => "正常応答（指摘なし）",
        "1" => "正常応答（指摘あり）",
        "1000" => "APIキー未指定",
        "1001" => "APIキーが見つからない",
        "1002" => "退会済み",
        "1003" => "アカウント未承認",
        "1010" => "サーバが見つからない",
        "1011" => "サーバ設定エラー",
        "1030" => "アクセス拒否",
        "1400" => "リクエストパラメータが不正",
        "1400" => "リクエストパラメータが不正 (sentenceがUTF-8でない）",
        "1404" => "指定したオブジェクト見つからない",
        "1405" => "メソッドが正しくない",
        "1413" => "リクエストパラメータの値が長すぎる",
        "1500" => "サーバ処理中に想定外のエラーが発生",
      );
    }
    ?>
    
    <!DOCTYPE HTML>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>PHP Sample</title>
    </head>
    <body>
    <form action="sotuken.php" method="post">
        <p>入力エリア：<br>
        <input type="text" name="text"></p>
        <p><input type="submit" value="送信"></p>
    </form>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2022-12-09T02:01:26.337
92654
2022-12-09T12:17:33.590
2022-12-09T02:34:22.997
3060
55874
question
php html
誤字を見つける。phpのエラーが分からない。

[code]

    Warning: Trying to access array offset on value of type null 
    
[/code]

は、配列でない変数を配列としてアクセスした時に警告が出ます。 _（「null」や「数値型」の変数など）_  
$resultsに配列を入れている **json_decode** は nullを渡されると、nullを返します。  
したがって curlの通信結果が null を返していると思います。

追伸、 @を付けてWarning表示を抑制せずに原因を１つ１つ追求した方が良いと思います。


CC BY-SA 4.0
2022-12-09T12:00:10.173
92669
2022-12-09T12:17:33.590
2022-12-09T12:17:33.590
22793
22793
92654
answer