• ベストアンサー

str_replace()で文字化け

str_replaceについておしえてください。(IE6,php4.3.7,sjis環境) str_replace('','',$str) で$strの中に'能'という文字があると'能\'になってしまいました。 そこで str_replace('能\','能',$str); とすると今度はエラーになりました。 どうすれば化けなくなるでしょうか?

  • PHP
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

参考URLと同じ問題です。 (\については書かれていないが、\も対象になる、能がシフトJISで945C(5Cが¥)になるため)

参考URL:
http://okwave.jp/kotaeru.php3?qid=1296274
SoHeart
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

str_replace('能\','能',$str); がエラーになるのは str_replace('A\\','A\',$str); がエラーになる理由がわかれば理解できると思います。 普通\を除去する場合はstripslashes()関数を使います。 $str = stripslashes($str); ですね。 '能'が'能\'になる理由は参考URLを見てください。

参考URL:
http://jp.php.net/manual/ja/security.magicquotes.php
SoHeart
質問者

お礼

マジッククオート機能はないほうがいい。なんて思ってしまいました。 回答ありがとうございました。

関連するQ&A

  • str_replaceで文字化け

    お世話になります。 PHPでstr_replaceを使用しましたら、 「ー」や「・」などの文字が、文字化けを してしまいました。 いろいろ調べたのですが、よく分からずに 困っています。 PHPで文字の置換を行いながら、文字化けを しない方法はどのようにしたらよいのでしょうか。 $abc = str_replace(" ", "", $abc); のあとに$abcを出力しましたら、文字化けをして しまいました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • str_replace関数について

    str_replace (検索文字, 置換後の文字列, 元の文字列) str_replaceの「元の文字列」に2つ以上の変数を当てはめたいのですがどのようにすればよいでしょうか?

    • ベストアンサー
    • PHP
  • sjisの文字化けとその対処方法について

    今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?

    • ベストアンサー
    • PHP
  • str_replace()で、なぜ置き換わらないのでしょうか?

    下記でエスケープのtestをしていますが、何故か& の置換えが出来ず、「abc & def」としか表示されません。 <?php $memo="abc & def"; $memo=str_replace('&','&amp',$memo); echo $memo; ?> 幼稚な質問で恐縮ですが、どこが不具合の原因か教えて頂けるとありがたいです。

    • ベストアンサー
    • PHP
  • エスケープ文字にstr_replaceが効かない

    フォームで送信された文字列のうち、str_replace関数を使って半角記号を全角記号に置換したいのですが、一部のエスケープ文字が含まれている文字列の置換が上手くいきません。 ソースは以下に記しますが、現状では、"(ダブルクォート)は\&quot;、&(半角アンド)は&amp;と置換されてしまいます。 この場合であれば、”(全角ダブルクォート),&(全角アンド)と出力させたいのですが・・・ どなたかお気づきの点ありましたらご教示宜しくお願いします! ===============ソースコード================================= <?php $system = ""; if (isset($_POST["submit"])) { $system = htmlspecialchars($_POST["system"], ENT_QUOTES); $system = mb_convert_encoding($system, "EUC-JP", "SJIS"); $system = str_replace('&', '&', $system); $system = str_replace('"', '”', $system); $system = str_replace('あ', '”', $system); $_SESSION["system"] = $system; } $str = <<<STRING <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <form method="post" action="{$SERVER['PHP_SELF']}" enctype="multipart/form-data" > <textarea name="system" cols=40 rows=5 wrap=soft>{$system}</textarea> <input type="submit" name="submit" value="送信"> </form> ----------------------------------------------------------<br> {$_SESSION["system"]} </body> </html> STRING; $str = mb_convert_encoding($str, "SJIS", "EUC-JP"); echo $str; ?> ============================================================ ちなみに、『あ』→『”(全角ダブルクォート)』と、正しく置換されます。

    • ベストアンサー
    • PHP
  • preg_replace() で、 urlencode()

    現在、Wikiのようなものを作ろうとしていて、 文章中に [[文字列]] があった場合、 <a href="文字列">文字列</a> のような形に置き換えたいのですが、 次のようにすると、$strが「マ」などを含んでいる場合にエラーが起こってしまいます。 $str=preg_replace("/\[\[(.+)\]\]/e","'<a href=\"'.urlencode($1).'\">$1</a>'",$str); 「表」なども、もちろんエラーになります。 どのようにすれば良いのでしょうか。 あるいは、そもそも、別の方法で置き換えた方が良いのでしょうか。 また、過去ログ(http://oshiete1.goo.ne.jp/kotaeru.php3?q=1844374)に、 「表」といった\を含む文字列のURLエンコードをする際は、 「EUC」に文字エンコーディングを変換してから行うようにとの回答がありましたが、 以下のようにしてもエラーが起こってしまいます。 $str="表"; $str=urlencode(mb_convert_encoding($str, "EUC-JP", "SJIS")); どのように書けば良いのでしょうか。 合わせて困っております。 ご教授を宜しくお願い致します。 なお、 mbstring.encoding_translation=Off になってます。レンタルサーバーのため、変更できません。

    • ベストアンサー
    • PHP
  • $str=mb_ereg_replace('goo','グッド',$str);

    によって $strの中の'good'を'グッド'に変更したいのですが 'good'は大文字と小文字を区別しないようにしたいのですがどうしたらいいでしょうか? 例えば 'goOd'も'グッド'にしたいのです。 PHPマニュアルには詳しい使い方が載っていないので困っています。

    • ベストアンサー
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 文字化け

    PHPを最近勉強し始めたのですが、どうしても文字化けしてしまう箇所があり質問させていただきました。 海外から購入したスクリプトを日本語化しようとしているのですが、エンコード方式が違う?ため、文字化けするようです。(.phpファイルの文字コードはEUC-JPで統一しています) function encode_s($s) { $s = rawurlencode($s); $s = str_replace('%26','&',$s); $s = preg_replace('/%([\dABCDEF]{2})/e', "'&#'.hexdec('\\1').';'",$s); return $s; } マルチバイト関数等を勉強中ですが現状ではわからないです。 どなたかご指摘お願いします。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • IEでのみ str.serch("+") が許されないのは何故ですか?

    つい先日も質問をしましたが、また今日も質問させていただきます。 お願いします。 文字列内に存在する+記号を全て適当な文字に変えてデータを渡して、 渡された側で+に戻すという、自作のエンコード・デコードらしきプログラムを組んでいます。 当初はNetscape6でのみ確認をしていたのですが、ある程度制作が進行してから InternetExplorer5で確認したらエラーと表示されてしまいました。 <自作エンコード> while(STR.search("+")!=-1) STR = STR.replace("+","_plus_"); 原因は while(STR.search("+")!=-1) らしく、 『文字の繰り返しを表す正規表現演算子が不正です』 と表示されます。 IEでのみのエラーで、ネスケの場合は正常に動作が進行します。 IEとネスケは違いがあるとはよく聞きますし、 これ以外にも発生したエラーは何とか直すことができたのですが このエラーだけはどうしても対処ができませんでした。 男らしく予想される最大の+の数の分だけ  STR = STR.replace("+","_plus_"); を書けば問題はないですけど、 できれば避けたい方法です。。。 なるべく綺麗なプログラムに仕上げたいので この質問に対するお答えをお持ちの方、どうかご協力お願いします。 無さそうでしたらその旨お伝えいただければ助かります。

専門家に質問してみよう