• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定の関数が機能しません)

特定の関数が機能しない障害について

このQ&Aのポイント
  • PHPとJavascriptでアプリケーションを作成していますが、特定の関数が正しく機能しません。障害の詳細や原因、解決策を教えてください。
  • 画面上のTextareaで複数行入力ができるようになっていますが、改行情報「 」をそのまま表示するとエラーになります。PHP側で「 」に変換しているのですが、一部のデータだけ変換されない問題が発生しています。原因や対策方法を教えてください。
  • ローカル環境でテストしたときに問題が発生しており、デプロイしても同様の結果となります。原因が何かわかりますか?解決策やヒントを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

今どき、ネイティブなMySQL関数というのもアレです。しかもmysql_set_charsetを使わずset namesだし、外部から与えられた値をmysql_real_escape_stringも(というか、何のエスケープ処理も)していないし・・・ 早急にPDOなど(&プレースホルダを利用)に書き替えてください。 閑話休題 str_replace("\r\n", '\n', $str) ではなく、str_replace("\n", '\n', str_replace("\r", '', $str)) だとどうなりますか?"\r\n"と思っていたら、実は(他で何らかの処理をしていて)"\n"だけだったなんてこともあり得そうなので、"\r"を削除して、"\n"を'\n'に置換というパターンが確実だと思います。

panasobi
質問者

お礼

「"\r\n"と思っていたら、実は(他で何らかの処理をしていて)"\n"だけだった」 ということのようでした。 $memoTrading = str_replace(array("\n","\r\n","\r"), '\n', $row["memoTrading"]); とやったら、すんなり通ってしまいました。 コードの他の部分も見てみたんですが、 「他で何らかの処理をしていて」というのは見つからなかったのに、なぜだろう。 でも、こういうところまで見抜くとはすごいですね。 本当にありがとうございました。 ご指摘の通り「昭和の匂いのするプログラム」のようです。Prepared Statemment とか勉強して、もっといいプログラムに書き換えていきたいと思います。 ありがとうございました。

その他の回答 (2)

  • coai
  • ベストアンサー率50% (152/301)
回答No.3

私もちゃんと見ていませんが、 $memoCustomer = str_replace("\r\n", '\n', $row["memoCustomer"]); 等の置き換え文字の'\n'をシングルクォーテーションで括っているのは、ちゃんと意図してやってるのだろうか? ソースコード内コメントの // 格納されている改行コード \r\n(CR+LF) から \n(LF) に変換 を読む限り、シングルとダブルの違いを理解せずにやってるようにしか思えない。 まあ、コメントの書き方が悪いだけかも知れないが…

panasobi
質問者

お礼

回答ありがとうございました。 JSONはダブルコートで括らなければいけないものですから、JSONに渡すときはシングルコートでないといけないようです。 コメントの書き方はもっと丁寧に書くようにします。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

真剣にみてないのでなんとも言えませんが javascriptにデータを戻すときに\nを\\nにしてみては?

panasobi
質問者

お礼

回答ありがとうございました。 JSONで渡す前に変換したかったのでこのようになりました。 参考にさせて頂きます。

関連するQ&A