• 締切済み

特殊記号 '―' の扱いについて困っています

はじめまして、PHPにおける特殊記号の取り扱いについて質問させていただきます。 以下の処理を行っているのですが特殊記号'―'(ダッシュ)の扱いで悩んでいます。 1.文字コード'utf-8'のファイル内文字列をget_filecontentsで取得 2.取得文字列を'SJIS'に変換(mb_convert_encoding使用) 3.文字列内に'―'が存在していた場合'?'となってしまう ex)"今日の野球結果 5―6"(文字コードutf-8)  ->SJIS変換後 "今日の野球結果 5?6" 特殊文字'―'を文字コード変換できずに上記のような現象が起こっていると思うのですがこれを回避する方法がありましたらご教示お願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

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

どの「ダッシュ」でしょうか   http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5_%28%E8%A8%98%E5%8F%B7%29#.E5.85.A8.E8.A7.92.E3.83.80.E3.83.83.E3.82.B7.E3.83.A5.E3.81.AE.E3.83.9E.E3.83.83.E3.83.94.E3.83.B3.E3.82.B0.E5.95.8F.E9.A1.8C 先に他のダッシュに置換しておけばいいように思います。というかこの手の変換はケースバイケースですね。Windows-31J(CP932)に変換すれば化けずに済んだりしませんか?

viola_00
質問者

補足

ご回答ありがとうございます。 「―」 — emダッシュダッシュ(全角) もしくは ― ホリゾンタルバークォーテーションダッシュ だと思います。 1.文字コード'utf-8'のファイル内文字列をget_filecontentsで取得 この後にmb_ereg_replaceなどで文字変換(「―」を「-」)したいのですが、そもそも「―」をPHPソースに記述するとエラーが出てしまいます。 「―」が 「―」なのでこれを利用する方法とかあるのでしょうか。。。

関連するQ&A

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • 文字エンコードについて

    Blogの更新をPHPで挑戦してみたのですが、文字化けしちゃって訳がわかりません… PHPのバージョンは5.1.6.6でバッチファイルを使用してます。 色々調べてみた結果Blogの方の文字コードがShift_JISみたいなので (PHPは基本UTF-8ですよね?) mb_convert_encodingかmb_convert_variablesの関数かなと思って使用してみたのですが結果はエラーがおきてしまい↓↓どうしていいのか分かりません、、 mb_convert_encoding(変換したい文字列, "SJIS", "auto"); mb_convert_variables("JIS", "UTF-8", 変換したい文字列); autoのところをUTF-8にしてもおなじでした… もちろん一つずつ試しました。 どなたかいい解決方法を教えて頂けませんか?

    • 締切済み
    • PHP
  • 文字列のエンコードについて

    例えば以下のコードで日本人がターゲットのサイトを作ったときにエンコードがutf8以外ってありますか?idなどもutf8でなんとかなるのになぜ他の文字コードは必要なのですか? //SJISに変換 $str = "私のidはrxxdtggb63332224667です。"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8"); //SJISに変換 $str = "gcdddyyghgcc.jpg"; $result = mb_convert_encoding($str, "SJIS"); echo $result . "\n"; //UTF-8に変換 echo mb_convert_encoding($str, "UTF-8");

    • ベストアンサー
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • 連想配列の文字コードを変換

    あるクラスから渡された連想配列値の文字コードはUTF-8です。 連想配列に格納されている値の文字コードをSJISに変換したいのですが、単に md_convert_encoding($array_values,'sjis','auto') ではうまくできません。 どうすれば変更できるのでしょうか?

    • ベストアンサー
    • PHP
  • UTC-8→SJISで文字化け

    こんにちわ!宜しくお願い致します。 現在、オープンソースのアンケートシステム「limesurvey」におきまして、文字化けが起きており困っております。 LimeSurveyバージョン 1.90+ Build 9046 ほとんどのところは、きちんと日本語表示されるのですが、グラフ内(pchart)の文字が文字化けします。 いろいろネットで調べて、imagettftextが原因と分かりました。 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合、GDライブラリは渡された文字列をUTF-8ではなく、Shift_JISとして解釈するということが分かり、mb_convert_encoding関数であらかじめShift_JISに文字コード変換してから、imagettftext関数に渡したところ基本的には、文字化けが解消しました。 以下が、そのコードです。 $Value2 = mb_convert_encoding($Value2,"SJIS ","UTF-8"); しかしながら、「(1)(2)(3)」(←まる1、まる2、まる3)などの機種依存文字がどうしても「?」に変換されてしまいます。 Shift_JISには、「(1)(2)(3)」などの機種依存文字が無いので仕方がないのですが、何とか良い方法が無いでしょうか? ちなみにネットで調べたところ、「SJIS」ではなくて、「SJIS-win」で変換すれば文字化けが起こらないと分かりましたが、今度は、imagettftextでエラーが出てしまいます。 下記のコードはエラーになります。 $Value2 = mb_convert_encoding($Value2,"SJIS-win ","UTF-8"); 「JIS-mapped Japanese Font Support」の設定値がTRUEの場合でも、GDライブラリは渡された文字列をUTF-8として強制的に解釈させる方法など無いのでしょうか?その他何か良い方法があればお教え下さい。 以上、宜しくお願い致します。

    • 締切済み
    • PHP
  • MySQL文字コード

    DB情報をHTMLで表示する場合に、mb_convert_encoding()で指定する文字コード MySQL5.1 PHP5 HTML - shift_jis MySQL の文字セット UTF-8 Unicode (utf8) MySQL の接続照合順序: ujis_japanese_ci フィールドの照合順序 ujis_japanese_ci PHPプログラムでDB情報取得後にSJISに変換 mb_convert_encoding($String, "SJIS", "●●●"); ●●●の文字コードを何を指定すればいいのかがわかりません。 EUCを書くとうまくいってるような気もしますが、なぜEUCでうまくいく のかもわかりません。 ご教授下さい。

    • 締切済み
    • PHP
  • PHPで受ける文字コードは何に依存する?

     例えばmb_convert_encoding()で変換するとき、元の文字コードは何に依存されるのでしょうか?  フォームで送る場合は、フォームページのHTMLのでmetaタグに指定されている文字コードになるんでしょうか?  charset=utf-8とmetaタグで指定されている場合、PHPのmb_convert_encoding()で受け取るときの変換前の文字コードはutf-8?  データをutf-8で扱いたいとき、フォームページをcharset=utf-8で作っておけば、mb_convert_encoding()でわざわざutf-8に変換するようにしておかなくても大丈夫ですか?

    • ベストアンサー
    • 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
  • ubuntuのようなutf8マシンでsjisを扱う方法について

    perlでwebページを作ってるんですが、ブラウザからサーバーにformで文字が遅れなくて困っています。 1.ブラウザで文字入力 2.perlで取得してsjisに変換。 3.MySQLにその文字列を登録。 ということをしようと思っているのですが、2の段階でsjisに変換できず困っています。 $a=Jcode::convert($a,"sjis","utf8") などと書いてみますがうまくいきません。 どなたかご指南頂けたら幸いです。

専門家に質問してみよう