<< 特定の日本語表示に対する文字化け 質問一覧 simplexml_load_file関数で取り出せな... >>
  • キーワードが設定されていません

  • 0P
【再質問22:00/AU不具合】ファイルの再編集方法と分割表示

  1. 進行状況は最下部参照願いますm(__)m
  2. 宜しくお願い申し上げます。
  3.  
  4.  
  5. ■ファイルを自由に再編集
  6. ■テキストを分割表示
  7.  
  8.  
  9. <?php
  10. $file=file_get_contents("test.dat");
  11. $array=str_split($file2);
  12. $count=count($file);
  13. $text=$_POST["text"];
  14.  
  15. if($text){
  16. $fp = fopen ("$file","w+");
  17. fputs ($fp,"ここがわかりません");
  18. fclose ($fp);
  19. }
  20. echo<<<EOM
  21. <form action="./test.php">
  22. EOM;
  23. for($i = 0$i < $count$i++)){
  24. echo"<textarea name=\"ここがわかりません($text??)\">ここがわかりません($array??)</textarea>";
  25. }
  26. echo<<<EOM
  27. <input type="submit" value="変更">
  28. </form>
  29. EOM;
  30. ?>

test.datの内容を2文字ずつ分割にしてtextareaで表示させたいのですが、繰り返しの部分と、その内容を新しく保存する際の方法がわかりません。

例えばtext.datの内容が『あいうえおかきくけこ』だとします。
1文字ずつ分割して
forで繰り返しにします。
forの部分は、多分間違っています。
<textarea name="text">あい</textarea>
<textarea name="text">うえ</textarea>
<textarea name="text">おか</textarea>
<textarea name="text">きく</textarea>
<textarea name="text">けこ</textarea>

と分割して表示させて、内容を変更します。
仮に、『あ』→『か』に変更します。

<textarea name="text">かい</textarea>
<textarea name="text">うえ</textarea>
<textarea name="text">おか</textarea>
<textarea name="text">きく</textarea>
<textarea name="text">けこ</textarea>

になります。
これで保存すると、最後の$textだけが反映され、内容が『こ』だけになります。
多分配列を使うだろうとは、わかるのですが、分割した時に統一して保存するには、どうすればよいでしょうか??


凄く困っているので具体的にコードを埋めて下さると助かりますm(__)m
初歩的な質問ですみませんが、どうぞ宜しくお願い申し上げます。

なんとなく$text[]みたいにしてみたのですが、使い方がいまいちわからず、出来ませんでしたm(__)m

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。

Q【再質問22:00/AU不具合】ファイルの再編集方法と分割表示 chiebukurophp4  [03月10日 22時33分] 
┣Re:ファイルの文字を分割して表示→元に戻す方法[初歩] signal  [03月10日 23時00分] 
┃┗Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月10日 23時26分] 
┃  ┗Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] signal  [03月10日 23時30分] 
┃    ┗Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月10日 23時36分] 
┃      ┗Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] signal  [03月10日 23時42分] 
┗Re:ファイルの文字を分割して表示→元に戻す方法[初歩] magicflute2  [03月11日 00時34分] 
  ┗Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 01時06分] 
    ┣Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] magicflute2  [03月11日 01時54分] 
    ┃┗Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 10時57分] 
    ┗Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] shimix  [03月11日 09時26分] 
      ┗Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 11時00分] 
        ┗Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 12時00分] 
          ┗Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] shimix  [03月11日 17時20分] 
            ┗Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 17時43分] 
              ┗Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] shimix  [03月11日 17時57分] 
                ┗Re:Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] chiebukurophp4  [03月11日 18時08分] 
                  ┗Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩] slyman  [03月21日 02時17分] 

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

  1. <?php
  2. $file=file_get_contents("test.dat");
  3. $array=str_split($file2);
  4. $count=count($file);
  5. $text=$_POST["text"];
  6.  
  7. if($text){
  8. $fp = fopen ("$file","w+");
  9. fputs ($fp,implode(''$text));
  10. fclose ($fp);
  11. }
  12. echo<<<EOM
  13. <form action="./test.php">
  14. EOM;
  15. foreach($array as $t){
  16. echo"<textarea name=\"text[]\">$t</textarea>";
  17. }
  18. echo<<<EOM
  19. <input type="submit" value="変更">
  20. </form>
  21. EOM;
  22. ?>
確認してないですが

Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答頂きありがとうございます。
お陰様でtextareaで分割までは出来たのですが、新しい内容にして保存しようとしても、更新されるだけで内容が変更されないのですが、これはどこを修正すればいいのでしょうか??
method="post"
を書き忘れていたので、書き足したのですが無理でした。
そもそもcountは使わないのですね。
勉強になります。
今一度宜しくお願い申し上げます。

  1. <?php
  2. $file=file_get_contents("test.dat");
  3. $array=str_split($file4);
  4. $text=$_POST["text"];
  5. if($text){
  6. $fp = fopen ("$file","w+");
  7. fputs ($fp,implode(''$text));
  8. fclose ($fp);
  9. }
  10. echo<<<EOM
  11. <form action="./test.php" method="post">
  12. EOM;
  13. foreach($array as $t){
  14. echo"<textarea name=\"text[]\">$t</textarea>";
  15. }
  16. echo<<<EOM
  17. <input type="submit" value="変更">
  18. </form>
  19. EOM;
  20. ?>

Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

$fp = fopen ("$file","w+");

これはおかしいと思わないのかしら?

Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答ありがとうございます。
初歩的な事だと思いながら何度見ても本気で、わかりませんm(__)m
その部分の何がおかしいのでしょうか??泣

→わかりました。。
$file1="test.dat";
$fp = fopen("$file1", "w+");

ですね。
凡ミスで本当にすみません。

ありがとうございましたm(__)m
凄く助かりました。
また宜しくお願い申し上げます。

Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

print $file;

Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

textareaに表示した事により、なんの強制力も働かなくなる。
余計な文字を追加されて、データは壊れるね。
仕様の再考をお勧めします。

Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答ありがとうございます。
具体的にどういう意味でしょうか??
stripslashesを付ければよいでしょうか??

実際には、htmlがデータファイルに入っております。
どうかご教授願います。

Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

文字数制限の出来ないtextareaの値を編集し、保存し直す。
わざわざ2文字ずつ抜き出した意味がない。

> 実際には、htmlがデータファイルに入っております。
「2文字ずつ」というルールもどこかへ行ってしまった。

恐らく、データファイル(HTML)を、XMLとして扱う事が、
ベターな選択だと推測します。

以下が、正常に表示されない(XHTMLやXMLでない)なら、
データファイルを見直すか、泥臭くやるしかない。
  1. <?php
  2. $file = 'test.dat';
  3. libxml_use_internal_errors(true);
  4. if ( ($xml = simplexml_load_file( $file ) ) === FALSE ) {
  5.   libxml_clear_errors();
  6.   die( 'XHTML(XML)以外のデータは扱えません' );
  7. } else {
  8.   var_dump( $xml );
  9. }

Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答ありがとうございます。

基本の部分を知りたくて、簡単に説明したのが、逆にわかりずらくしてしまったようですね。

そういうやり方もあるのですね。
非常に参考になりました。

しかし、それでは、編集するには、どうすればいいのでしょうか??

Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

エスパーすると、

  1. $array=str_split($file, 2);

というのは今現在のテスト用の記述であって、実際には(最終形としては)HTMLソースを適当なセパレータで区切るのではありませんか?

そういうことを書いておかないと(元のソースだけ読むと)「何これ?」ってなってしまうと思います。

2文字というのにinputじゃなくてtextareaを使うこと自体おかしいわけですし、マルチバイト文字のみのhtmlソースなんてあり得ないわけで(しかも全部2バイト限定)。asciiと日本語が入っているデータならstr_splitで分割しちゃマズイですしね。

Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答ありがとうございます。

まさにその通りです。

HTML文書がありまして、それを1000程度で区切ってtextareaで分割表示しています。
これを再編集して新しいデータだけを保存したいというのが今回の本当の質問でした。

携帯用サイトなので、分割表示にしなければ、再編集出来ないので、こういうやり方をご質問させて頂きました。

Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

結局本当にやりたい事が出来なくなりましたので、また質問させて下さい。
最終的に試行錯誤してみた結果、以下コードで再編集まで出来るようになりました。
しかし、文字化けがおきます。
  1. foreach($_POST['text'] as $value){
  2. $text=stripslashes($value);
  3. fputs($fp, $text);
  4. }
の部分を
  1. $text=stripslashes($_POST["text"];
  2. foreach($text as $value){
  3. $text=$value;
  4. fputs($fp, $text);
  5. }
とすると何故かエラーが出ます。

更にHTMLにtextareaが含まれていると勝手に閉じられてしまいファイルが壊れます。
これの対処法も教えて頂けると助かります。
\/等でエスケープしてみましたが、無理でした。


  1. <?php
  2. $step1=$_POST["step1"];
  3. $file="test.html";
  4. $file1=file_get_contents("$file");
  5. $array=str_split($file1500);
  6.  
  7. if($step1==1){
  8. $fp = fopen ("$file","w+");
  9. foreach($_POST['text'] as $value){
  10. $text=stripslashes($value);
  11. fputs($fp$text);
  12. }
  13. fclose ($fp);
  14. }
  15. echo<<<EOM
  16. <form action="./test.php" method="post">
  17. <input type="hidden" name="step1" value="1">
  18. EOM;
  19. foreach($array as $t){
  20. echo"<textarea name=\"text[]\" cols=\"20\" rows=\"5\">$t</textarea><br>";
  21. }
  22. echo<<<EOM
  23. <input type="submit" value="再編集">
  24. </form>
  25. EOM;
  26. ?>

Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

最初のソースように
  1. foreach($_POST['text'] as $value) {
  2.     fputs($fp, stripslashes($value));
  3. }
でいいと思います。stripslashesの引数は「文字列」ですから、配列を渡すとWarningになります(戻り値がありません)。

  http://php.net/manual/ja/function.stripslashes.php

>HTMLにtextareaが含まれていると勝手に閉じられてしまいファイルが壊れます。

  http://www.php.net/manual/ja/function.htmlspecialchars.php


(蛇足)
間違いなくmagic_quotes_gpcがonの環境なんですよね?普通はそれをチェックしてからstripslashesするので。

Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答頂きありがとうございます。

そうだったのですか、普段よくstripslashesを使うのですが、エラーになった事がなかったので焦りました。
配列は渡せないのですね。
そういった使い方をしていなかっただけのようです。
了解致しました。
一つ勉強になりました。

magic_quotes_gpcがonですm(__)m

やはりhtmlspecialchartsしかないですか。

という事でファイルに保存する際にhtmlspecialchartsにして保存して、読みだす時に、特殊文字を元の文字に変換し直して使おうと思います。

保存時に、エスケープ出来ないのであれば仕方ないですねm(__)m

なんとか、自由にファイルを編集出来るようになりました。
また問題が起きるような気がしますが、ひとまず皆さんありがとうございました。

凄くたすかりましたm(__)m
また宜しくお願い申し上げます。

Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

>という事でファイルに保存する際にhtmlspecialchartsにして保存して、読みだす時に、
>特殊文字を元の文字に変換し直して使おうと思います。

違う。何のためにhtmlspecialcharsを使うのか(自分が困ったんだよね)。保存するときはそのままでかまわない。textareaの中に展開する(編集用に表示する)ときだけhtmlspecialcharsを通して出力する。

編集フォームからPOSTされるときは(わざわざdecodeしなくても)元に戻っているので「そのまま」保存して「そのまま」使える。

Re:Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

ご回答ありがとうございます。
なんとなく意味は理解致しました。

しかしながら、それとは、別に致命的な不具合を発見致しました。
name属性に[]を使うと一部の携帯では、正常に受け取れないという事を先程知りました。

http://pentan.info/mobile/au/form_array.html

$text[]はAU携帯では、使えないそうです。
試しに見てみたら、PCと違う値となりました。
全て最後のtextareaの値となっておりました。

  1. foreach($array as $t){
  2. echo"<textarea name=\"text[]\" cols=\"20\" rows=\"5\">$t</textarea><br>";
  3. }

ここをどのように修正すれば、良いのでしょうか??
[0][1][2]のようになればいいとの事でしたm(__)m
いまいち出来ないのですが、教えて頂けますと幸いです。
これさえ出来れば、多分機能すると思います。
宜しくお願い申し上げます。
  1. <?php
  2. $step1=$_POST["step1"];
  3. $file="test.html";
  4. $file1=file_get_contents("$file");
  5. $array=str_split($file1500);
  6.  
  7. if($step1==1){
  8. $fp = fopen ("$file","w+");
  9. foreach($_POST['text'] as $value){
  10. $text=stripslashes($value);
  11. fputs($fp$text);
  12. }
  13. fclose ($fp);
  14. }
  15. echo<<<EOM
  16. <form action="./test.php" method="post">
  17. <input type="hidden" name="step1" value="1">
  18. EOM;
  19. foreach($array as $t){
  20. echo"<textarea name=\"text[]\" cols=\"20\" rows=\"5\">$t</textarea><br>";
  21. }
  22. echo<<<EOM
  23. <input type="submit" value="再編集">
  24. </form>
  25. EOM;
  26. ?>

Re:Re:Re:Re:Re:Re:Re:Re:Re:Re:ファイルの文字を分割して表示→元に戻す方法[初歩]

  1. $idx = 1;
  2. foreach($array as $t){
  3. echo"<textarea name=\"text".$idx."\" cols=\"20\" rows=\"5\">$t</textarea><br>";
  4. $idx++;
  5. }
とか
特定の日本語表示に対する文字化け 質問一覧 simplexml_load_file関数で取り出せな...