• ベストアンサー

全角の”’¥を半角に変換したい

PHPを勉強し始めた超初心者です。よろしくお願いいたします。 表題のとおり、PHPにて全角の”’¥を半角の"'\に変換したいのですが、うまくできません。 ----- A ----- $s = "”’¥"; mb_convert_kana( $s, "as" ); 結果:全て全角のまま。 ----- B ----- $s = "”’¥"; $s = mb_ereg_replace( '”', '"', $s ); $s = mb_ereg_replace( '’', '\'', $s ); $s = mb_ereg_replace( '¥', '\\', $s ); 結果:”’は半角になるんですが、¥は半角になりません。 なにか根本的に間違いがあるんでしょうか? あともう一つ、日本語環境について、 mb_language( "Japanese" ); mb_internal_encoding( "EUC-JP" ); mb_regex_encoding( "EUC-JP" ); mb_substitute_character( "none" ); mb_detect_order( "SJIS,EUC-JP,JIS,UTF-8,ASCII" ); と、ソースに指定しているのですが、ローカル環境がWindowsなので、ソースそのものはSJISになっていると思います。(コード体系管理できないテキストエディタ使用) しかしこれをそのままサーバーにアップしても、問題なく(文字化け等無く)print"サシスセソラリルレロ"; なども表示されるんですが、これはこれでいいんでしょうか? 以上、よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

$s = "¥"; echo str_replace("¥","\\",$s); echo ereg_replace("¥","\\",$s); こんなのでいいんじゃないでしょうか? mb_internal_encoding( "EUC-JP" ); mb_regex_encoding( "EUC-JP" ); これがなければmb_ereg_replaceでも動作すると思います。 mbstring系の関数は内部文字コードを見て判断するので、実際はSJISで書いているのに内部文字コードはEUCと設定されているような場合おかしな挙動になると思います。 文字コードを指定できるフリーソフトはいくらでもあるので、まずはエディタを用意することから始めた方がいいのではないでしょうか? SJISはプログラムを書くには何かと不便だと思いますよ。 また、文字コードをSJISで書くのであればmb_internal_encodingなどはSJISにした方がいいと思います。 ぱっと見動いているように見えて、実は稀に文字化けしてたなんてことが出てくると思います。

goosuke123
質問者

お礼

お返事ありがとうございます。 指摘いただいたように、EUC-JP → SJIS とする事で、確かに解決できました。ありがとうございます。 ところで、これらも含め、日本語の扱い方にまだまだ疑問があるんですが、ここにそれを書くよりも、新たに質問を起こそうと思います。もしその質問が目に止まり、かつ、お時間がございましたらアドバイスよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>コード体系管理できないテキストエディタ使用 web系のプログラムを書くのに文字コードが{指定|変換}できないエディタを使うのは無謀だと思います。適切なエディタを選択してください。

goosuke123
質問者

お礼

ありがとうございます。 文字コードを変換できるエディタ、もちろんそれを使うのが正しいアプローチであろう事はよくわかります。指摘いただいたように、最終的にはそうしようと思います。 ところで、これらも含め、日本語の扱い方にまだまだ疑問があるんですが、ここにそれを書くよりも、新たに質問を起こそうと思います。もしその質問が目に止まり、かつ、お時間がございましたらまたアドバイスよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ereg_replaceの文字化け

    すみませんが、どなたか教えて下さい。 漢字をひらがなにしたいと思い、 SJISファイルの以下のソースで、 mb_internal_encoding('SJIS'); mb_regex_encoding('SJIS'); $str = "除かれた"; echo ereg_replace("除[かきくけこ]","のぞ",$str); 結果を「のぞかれた」となるようにしたいのですが、 上記だと、「のぞゥれた」となってしまいます。 どうすれば直せるか分かる方はいらっしゃるでしょうか?

    • ベストアンサー
    • PHP
  • mb_ereg_replace での文字変換

    PHPでフリーの掲示板を制作中です。 目立たせようとする記号を削除しましたがうまく動きません。 $html = mb_ereg_replace('△', '', 'あああ△あああ'); ・希望結果 ああああああ ・実際の結果 ああ 文字コードは全て EUC-JP です。 また以下を追加するとエラーがでました。 $str="あああ△あああ"; $str = mb_convert_encoding($str, 'EUC-JP', 'auto'); ・エラー Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in そもそもmb_convert_encodingを使わない方が良いのか使い方が悪いのかも解りませんがアドバイスお願いします。

    • ベストアンサー
    • PHP
  • 【PHP】半角「\」を全角「¥」に変換したい

    PHP初心者です。 バージョンは4.4.4 ファーストサーバ 文字コードはUTF-8 です。 マルチバイト文字の中の半角「\」をそれ以外の文字に変換したいのですがどうすればできるでしょうか? (1)$str = mb_ereg_replace("\\", '¥', $str); (2)$str = preg_replace("\\", '¥', $str); (1)も(2)もエラーとなり変換できません。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Shift-JISからUTF-8への変換が出来ません

    初歩的な質問で申し訳ありませんが、大変困っております。ただいまimagettftext()を使って日本語主力したく悪戦苦闘しております。  ページ自体はShift-JISで制作していますのでimagettftext()で日本語を出力する場合はUTF-8へ変換して出力するところまでは知れべていて分かりました。しかしいざmb_convert_encoding()で変換しようとするとなぜかUTF-8へ変換されません。 $str = mb_convert_encoding($str,"UTF-8","SJIS"); print mb_detect_encoding($str);  結果→SJIS しかしこれがEUC-JPなら変換されます。 $str = mb_convert_encoding($str,"EUC-JP","SJIS"); print mb_detect_encoding($str);  結果→EUC-JP なぜなのか原因が分からなく困っております。 どなたかご教授願いませんでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • PHP5.1 + APACHE2 + PostgrSQL8.1 + Eclipse3.2で全角文字の文字化けが

    お世話になります。PHP暦5日その内3日はこの問題で悩んでいます。 EUCとSJISが混在していることが原因だと思うのですが、 その先が進みません。 過去ログなどを読み、EUCに統一することが望ましいことが分かり、 そのつもりで挑戦しているのですがダメダメ君です。 現状では、 PostgrSQLから読み出したデータはEUCで PHP内でprintやechoなどで文字を出力するとSJISとなります。 文字化けを解決する方法お願いします。 ちなみにphp.iniはこんな感じです。 php.ini -------------------------------- default_charset = EUC-JP extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none

    • ベストアンサー
    • PHP
  • 【PHP】半角「\」を全角「¥」に変換したい(2)

    同じ過去の質問を見つけたのですが、実行してみたところできなかったので相談させてください。【過去質問】:http://oshiete1.goo.ne.jp/qa3065958.html PHP Version 4.4.6、文字コードはshift-JISです。 アンケートフォームで入力された値を受け取り、半角「\」があれば全角「¥」に置換したいのですが、上手くいきません。 試したのは下記の方法です。 [1]  $str = preg_replace("\\", "¥", $str); [2]  $str = mb_ereg_replace("\\\\", '¥', $str); [3]  $str = preg_replace("/\\\\/", '¥', $str); 同じ質問をされている方は文字コードが「UTF-8」で上記の[2][3]で上手くいっているようなので、文字コードを変更すればいいのかもしれませんが、現在あるフォームを修正しているので、できればshift-JISでしたい・・・と模索中です。 また、サイトの性質上「○○円の~」というようなメッセージが多いので、¥を削除することはできるだけ避けたいです。 ご指導をお願いいたします。

    • ベストアンサー
    • PHP
  • 半角¥を全角¥に変換するために

    <?PHP mb_language('ja'); mb_internal_encoding('utf-8'); $str="ok\\ok<br/>"; echo$str; mb_ereg_replace('\\','¥',$str); echo$str; ?> としましたがエラーになりうまくいきません どう修正したらいいでしょうか?

    • ベストアンサー
    • PHP
  • 日本語が使いたいのですが[mbstring]設定がわかりません

    環境は winxp sp2 apache 2.0.54 php 5.0.4 argosoftmailserver php.iniの設定は [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none です。足らない事があればお願いします。 下はphpの文です。 <?php $subject = "テスト"; $message = "あいうえお"; $test="日本語エンコーディングテスト"; print "$test (" . mb_detect_encoding($test) . ")<br>"; print ("mbstring.http_input=". mb_http_input() ."<br>"); print ("mbstring.http_output=". mb_http_output() ."<br>"); print ("mbstring.internal_encoding= ".mb_internal_encoding()."<br>"); $subject = mb_convert_encoding($subject, "SJIS", "EUC-JP"); $message = mb_convert_encoding($message , "SJIS", "EUC-JP"); mb_language("Japanese"); $chk = mb_send_mail('******@*******',$subject,$message,'From:***@******.dyndns.org'); if($chk==FALSE) { print "送信失敗"; } else { print "送信完了"; } ?> エンコードテストの結果は以下です。 日本語エンコーディングテスト (SJIS) mbstring.http_input= mbstring.http_output=SJIS mbstring.internal_encoding= EUC-JP よろしくお願いします。

    • ベストアンサー
    • PHP
  • 携帯からメールを送ると文字化け・・・

    PCからメールを送ると正常に表示されてるのに、携帯からだと内容が化けてしまうという現象になってしまいました・・・。 function sendmail($to,$from,$from_name,$title,$message){ /* JISコードへのエンコーディング */ $to = mb_convert_encoding($to, "JIS","EUCJP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $from = mb_convert_encoding($from, "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $title = mb_convert_encoding($title , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $message = mb_convert_encoding($message , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); 分かる方いらっしゃいましたら、よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • phpの半角カタカナの文字化け

    宜しくお願いします。 phpで変数に代入した文字列が半角カタカナだとhtmlからpostで渡された一回目の表示は普通に表示されるんですが、そこから先のphpにsubmitで引き渡される際(もしくは、同じphpファイル内でsubmidで送られた際)に、代入した文字列が化けてしまいます。perlでフォーム作ってた時はこんなエラーは発生しませんでした。 携帯用のフォームとして作っているので、出来れば半角カタカナで表示できると文字列がコンパクトになるので助かるんですが・・・作ってる環境は、win2000で、サーバのphpは4.1.2-p4となっています。phpinfoで調べてみた内容は、 mbstring.detect_order auto auto mbstring.func_overload 0 0 mbstring.http_input auto auto mbstring.http_output SJIS SJIS mbstring.internal_encoding EUC-JP EUC-JP mbstring.substitute_character no value no value となっております。 何卒、アドバイスの程、宜しくお願い致します。

    • ベストアンサー
    • PHP