質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

ffftpについて BOMを取り除きたい。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,758

score 12

ffftpを使って、ftp接続を行っています。
デフォルトのエディタはterapadであり、BOMがあるため、最初に3byte分の文字が自然入力されてしまいます。
このBOMを取り除くには、どのように対処すればよろしいでしょうか。
接続の際、「ホストの漢字コード」は「無変換」に設定しています。
ご教授いただけると幸いです。

試してみたこと
接続段階で、文字コードを「無変換」=>「utf-8」に変換したところ、「無変換」で作ったプログラムで下記の文法エラーが出ました。
エラー”Parse error: syntax error, unexpected '}' in "URL" on line 63”

以下、ソースコードです。
フォームを入力して、送信するとデータが保存されて、そこから指定した番号のフォームを削除できるというプログラムです。

<DOCTYPE html>
<head>
<meta charset ="utf-8">
</head>
<!--フォームの作製-->
<body>
<form action="URL" method="post">
  <table>
    <tr><td>名前:</td>
    <td><input type=text name="name"></td></tr>
    <tr><td>コメント:</td>
    <td><textarea name="comment" cols="30" rows="5"></textarea></td></tr>
    <tr><td><input type="submit" name="submit" value="送信"></td></tr></table>
</form>

<!-- ファイルに番号、時間、名前、コメント等書き込む-->
<?php
if(isset($_POST["submit"])){
$fp1 = fopen('kadai_2_5.dat','r+');
$num = fgets($fp1);
if (empty($num)){
  $num =1;}
fseek($fp1,0); //これは必要。なければ、1>2>23>2324....と続く。
fputs($fp1,$num + 1);

//フォーム内容と送信時間、送信番号をファイルに書き込む。
$timestamp = date("Y/m/d H時i分s秒");
$name = $_POST["name"];
$comment = $_POST["comment"];
$file = "kadai_2_5.txt";  //.txtはフォーム内容
$fp2 = fopen($file, "a+");
fwrite($fp2, "(".$num.")|"."名前:".$name."|コメント: ".$comment."|投稿時間: ".$timestamp.""."\n");
fclose($fp2);
fclose($fp1);
}?>

<!-- ファイルを読み込んで配列に変換、さらにリストに変換して画面表示する。-->
<?php
// if(isset($_POST["submit"])){
$num_arr = array();
$content = file("kadai_2_5.txt");
foreach ($content as $list) :  //リストは送信ファイル一つずつ
  $parts = explode("|", $list); //partsは送信ファイルの各要素を配列化したもの
  $parts0 = substr($parts[0], strpos($parts[0], '(') +1, strpos($parts, ')') -1);
    array_push($num_arr, $parts0);
    // var_dump($num_arr);
?>
  <?php foreach ($parts as $part):?><!--ここから再度、サイトに送信ファイルを記入する-->
    <table><tr>  <?php echo $part;?> </tr></table>
  <?php endforeach; ?>
<?php endforeach;?>

<!-- 削除ボタンを押したときの操作、まずフォームを作成、その後、処理をphpで記す -->
<form method="post" action="URL">
  <p></p>
  <p>削除したい番号を、半角数字、カンマ区切りで入力してください。</p>
  <input type="text" name="remove_number" placeholder="例)1,3,5">
  <input type="submit"  name="remove_button" value="削除する">
</form>
<?php //消去番号をループ。フォーム番号と一致したら、消去
  if($_POST["remove_button"]){ //消去ボタンが押されたら。
    if($_POST["remove_number"]){ //消去欄に番号が入力されていたら
      $remove_arr = explode(",", $_POST["remove_number"]);//消去する番号を配列で入手
      $err_arr = array();
      $del_arr = array();
      foreach ($remove_arr as $num_one): //削除番号をループ
        if(in_array($num_one, $num_arr)){}else{
          array_push($err_arr, $num_one."番のファイルは存在しません。<br />");
        }
        $i = 0;
        foreach ($num_arr as $num_form) { //フォーム配列のループ
          $i++;
          if($num_form == $num_one){ //もし削除番号が、配列の中にあれば
            unset($content[$i-1]);
            array_push($del_arr, $num_one."番のファイルを削除しました。<br />");
          }
        }//num_arrのforeach
      endforeach; //remove_arrのendforeach
      foreach ($err_arr as $err) {
        echo $err;} //入力したが、番号がないときに吐き出す。
      foreach ($del_arr as $del) {
        echo $del;} //削除した番号を吐き出す。
      $content = array_values($content); //
      $form_file = fopen("kadai_2_5.txt", "w+");
      foreach ($content as $key) {
        fwrite($form_file, $key);  }
      fclose($form_file);
    }else { //もし削除番号が入力されていなかったら
      echo "削除する番号を入力してください!!!!!";
    }//もし番号が入力されたら
  }//もし削除ボタンがおされたら
?>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

terapadであり、BOMがあるため

UTF-8Nで保存したらBOMは付かないと思うのですが・・・。

【TeraPadで文字コードにUTF-8(BOMなし)を指定して文字化けしないように保存する完璧な設定方法】
http://creating-homepage.com/archives/97

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/15 12:35 編集

    おかげさまで解決することができました。
    ffftp接続のホストの漢字変換コードを「utf-8」にするのではなく、「無変換」にしました。
    接続後にテラパッドをエディタに設定し、その中で、教えていただいたウェブサイトのように文字コードをUTF-8に設定すると、問題は解決しました。
    ありがとうございます。

    キャンセル

+1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/15 12:31

    ご指摘ありがとうございます。
    文字コードを変えることで解決しました。

    キャンセル

0

Parse error: syntax error, unexpectedを検索するといい

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/15 12:31

    ご指摘ありがとうございます。
    文字コードを変えることで解決しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る