• ベストアンサー

2バイトローマ数字小文字について(機種依存文字)

下記のようなローマ数字小文字を対象外にしたい場合はどのようにしたらいいのでしょうか? 現在の私のプログラムではローマ数字大文字は空白に変換してくれるのですが、、、 <現在のプログラム> mb_convert_encoding()を使用して、一度変換を行った文字列と元の文字列の文字長を比較し、短い方の文字の長さまで、元の文字列から一文字ずつ連結していく。

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

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

  • ベストアンサー
  • cybert
  • ベストアンサー率56% (18/32)
回答No.1

>下記のようなローマ数字小文字を対象外にしたい場合 文字列に正規表現をかけて、ローマ数字小文字があれば置き換えるまたは、エラーを出すのはいかがでしょう? 変数にローマ数字小文字があるか検索 <? $hoge = "123ⅰⅱⅲⅳ"; if(preg_match("[ⅰⅱⅲⅳⅴⅵⅶⅷⅸ]",$hoge)){ echo "ローマ数字小字あるよ"; } ?> <? $hoge = "123ⅰⅱⅲⅳ"; $hoge2 = preg_replace("[ⅰⅱⅲⅳ]","ローマ数字小字",$hoge) ?>

aiurai54
質問者

お礼

遅くなって申し訳まりませんでした。 対応してみます!! ありがとうございました!!

関連するQ&A

  • 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
  • 文字列のカラムを数字と比較したい

    sqlserver2005 文字列のカラム(ただし数字のみ)と、画面から文字列としてきた 数字の大小を比較したいと思っています。 たとえば、WHERE ~ 【対象カラム】 > CONVERT(NUMERIC,'1')のように しようと思っていたのですが、この場合、【対象カラム】の中に 空白があるとこけてしまいます。 文字列なので、空がNULLとは限らないため困っています。 そもそもINT型のカラムならば良いのですが、都合により文字列の カラムにするしかなく。 妙案ありましたらアドバイスいただけないでしょうか。

  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • 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
  • ローマ数字などの文字化け対策を教えて下さい

    JAVAが用いられて開発されているシステムなのですが、ユーザーからローマ数字など(I、II、IIIなど)が入力されたとき、それを表示する際に文字化けを起こします。 ローマ数字であれば、英字の"I""V""X"の組み合わせに変換することなので擬似的回避はできそうですが、あくまでローマ数字はローマ数字として扱えるようにしたいのです。 もちろん、ローマ数字以外の文字化け文字も対象で、文字化け対象の文字を意識することなく、ユーザー入力およびサイト表示させたいです。 どなたか手法をご存じの方、ご教授下さいませ。 よろしくお願いします。 参考: 文字化け一覧 http://cto.tafc.co.jp/archives/2005/01/post_7.html

    • ベストアンサー
    • Java
  • 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
  • 機種依存文字の除去

    現在PHP,EUC-JP環境にてプログラミングをしているのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432515 を参考にして機種依存文字の除去にチャレンジしています。 $str = mb_convert_encoding($str,'SJIS','EUC-JP'); $str = preg_replace( "/([\x87][\x40-\x9F]|[\xED-\xEE][\x40-\xFC]|[\xFA-\xFC][\x40-\x4B]|[\xF0-\xF9][\x40-\xFC])/" ,"",$str); $str = mb_convert_encoding($str,'EUC-JP','SJIS'); で機種依存を試しているのですが、うまくいきません。 ところどころ?+半角文字になったり、機種依存文字は?になったりします。 EUC-JPで機種依存文字を除去できる方法であれば上記の方法にこだわりません。 どなたかご教授いただけないでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • ASCII文字列をEUCなどに変換したいができない

    いつもお世話になっております。 ファイルの文字コードがEUCのファイルの中に、 なぜか、文字コードがASCIIである文字列があります。 この文字列は、外部から受け取るカタチなので、 これはこれで、ASCIIでも、しかたないのかなという風に思い、 それならば、受け取った後、EUCに変換すればいいやと考え、 mb_convert_encoding($var,"EUC-JP","ASCII")を使って、変換を試みるも、 ASCIIのままなのです。 ASCIIである文字列には、変換されない鉄壁さというものがあるのでしょうか? 変換処理後に、mb_detect_encoding()で検査しますが、やはりASCIIのままです。 それならば!、ということで、 受け取る値(ここでは例として、"This_Value_is_ASCII_Encoding_hogehoge9999")を いったん手動のコピペ操作をして、 $UketoruAtai = "This_Value_is_ASCII_Encoding"; とし、 その値もやはり、ASCII文字列になっているので、 この、手動コピペ文字列ならば文字コードの変換はできるだろうと思い、 上記のmb_convert_encoding()の処理をしたわけですが、 この場合でも、やはり ASCIIは鉄壁でした。 いったい、これは、なんなんでしょうか、、、。 ちなみに、このASCII文字列は、英数字のみ(当たり前か。笑)の文字列です。 このASCII文字列を、EUC-JPにする手助けを、どなたか宜しくお願い致します。

    • ベストアンサー
    • 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
  • 2バイト文字での SELECT文 がうまくいきません

    select * from table where color = '赤' という単純なセレクトなのですが、='赤' の部分が 文字化けします。redなどにするとエラーは起きません。 これはクエリを操作できるエディタ上でもアプリのソース上(画面上)でも同じです。 データベースの文字コードはeuc、ソース自体もeucです。 ちなみに、colorを変数として mb_convert_encoding をもちいて $color = $_POST["color"]; // postされた値(赤とか) $color = mb_convert_encoding($color,"EUC-JP",mb_detect_encoding($color)); "select * from table where color = '".$color."'"; などのようにするとうまくいきます。 しかし $sql = "select * from table where color = '赤'"; $sql = mb_convert_encoding($sql, "EUC-JP",mb_detect_encoding($sql)); のように固定2バイト文字を入れると変換してもエラーです。 この問題は何が原因でしょうか? 分かる方居られましたらお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう