• ベストアンサー

PHP,Perl の正規表現で”ー"を使うとエラーになってしまいます

PHPですと、ereg Perlですと、index等を使ってフォームから送られてきた文字を検索したいのですが、" ー "を使うと、PHPでは、エラーになり、Perlだと検索にかからなくなってしまいます。単語で例を挙げますと、"フォーム"などです。他の文字は平気みたいなんですけど、どういった原因が考えられるでしょうか。また、その対処法もできれば教えてください。ちなみにWindowsのメモ帳でやってます。

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

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

  • ベストアンサー
noname#45976
noname#45976
回答No.2

文字列をコンバートしてから使用すれば大丈夫かと思います。 jcode::convert(\$keyword, 'euc'); など、jcode.plを使って検索したいファイル(?)と同じ文字コードに変換してみてください。 $keyword - 検索文字列の入った変数 euc    - 文字コード(他sjisなど)

shunet
質問者

お礼

shift-jis ではなくて、eucで文字コードをそろえたら無事'ー'検索できました。 かなり初歩的な質問になってしまいました、、、ありがとうございました。助かりました。 文字コードってめんどうですね

shunet
質問者

補足

検索した文字はコンバートしていたんですけど、データファイルも今度コンバートしてみたんですけど &jcode'convert(*$line, "sjis");  このように どうしてもだめですね、'ー'だけだめなんですよね、パソコンがおかしいんでしょうか、、、すごいはまっちゃった感じです、、、

その他の回答 (1)

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

phpならi18n版のmbxxxx関数を使ってみましょう。 perlならjcode.plを使いましょう。

shunet
質問者

補足

ご回答ありがとうございます。 Perlではもちろんjcode.plを使ってますよ。でもだめなんですよ phpのi18n版のmbxxxx関数はちょっとわからないです、、、

関連するQ&A

  • 0P PHP 正規表現 perlとの違い

    php(PHP5)の正規表現に関する演算子についての質問です。 一つ目の質問 ある特定の1文字が指定した文字列の中に含まれるかどうか調べたいのですが、perlでは「m/a/」のような演算子を使っていました。ですが、PHPでは「m/a/」は使えないようです。PHPでは、どのように記述すればよいのでしょうか? 例 $string = "abcdefg" とし、$stringに「d」が含まれるかどうか調べたい。 ちなみに「stristr」を使用してstristr($string, "d")などとすると, 「d」が$stringに含まれない場合、falseを返してくれるのは良いのですが、含まれる場合、trueではなく文字列の中から一致した検索文字以降を返すのでだめでした(私がどうやるか知らないだけかも)。 2たつ目の質問 また、ある特定の文字の前と後に不特定の一文字又は複数の文字が含まれるかどうか調べたいのですが、以下のような正規表現では、だめでした。 $string ereg(".+@.+",$string) 上記の正規表現の場合、$stringの文字列が「@」一文字だけで「@」の前と後に何の文字もなくてもtrueを返してしまいます(本当は@マークの前後に最低1文字以上の文字列がなければだめなようにしたいのです。)。 どのようにすれば、良いのでしょう? ご存知の方がおられましたら、お教え下さい。 キャサリン

    • ベストアンサー
    • PHP
  • PHPの正規表現eregの使い方

    PHP初心者です。 eregを使った入力チェックをしたいのですが、思うように処理できません。 入力は半角英数字のみを受け付け、その他の入力の場合はエラー処理を行いたいと思ってます。 if (!ereg("^[0-9]+$", $user)) { // 半角英数字以外はエラー処理 } 参考のものがあったのでその通りやってみましたが、全角文字も受け付けてしまい困っています。 記号の意味もよくわかりません。 また、これに加え5文字以上8文字以内という条件も付けたいです。 よろしくお願い致します。

    • 締切済み
    • PHP
  • phpの正規表現について

    phpの正規表現についてです。 よく入力されたメール・パスワードを判定するのに正規表現で判定させますが、今回の指定する条件は… ・半角英数、0~9の組み合わせ ・使用禁止文字は \ ' @ [ ] の5つ ・入力は8文字以内 例 if(ereg("^[0-9a-z\!\"\#\$\%\&\(\)\=\-\~\|\{\}\;\:\+\*\,\.\/\<\>\?\_]{1,8}$", $pw)){ 記号の意味でよくわからないのがあるのですが、 { }は文字数を指定するものでよろしいのでしょうか? {1,8} は1~8文字までという意味? \が入ると認証が通ってしまってい、困っています。 ユーザーの入力    MySQLの取得結果 例 123\        → データが入らない   \123        → 123   \\123        → \123   123\123      → 123123   \\          → \ といった不具合になってしまい、MySQL側でも入力されたデータと異なったデータが入ってしまいます。\が入っても認証されないようにするにはどうすればいいんでしょうか? 正規表現の参考にしたサイトは http://itbtech.itboost.co.jp/php/php_06.php です。アドバイスよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    お世話になります。 いろいろ調べてテストもしたのですが、 どうしてもわからないのでヒントをください。 やりたいことは、PHPでパスワードチェックを したいのです。 a-z A-Z 0-9 _- 以外の文字が入ったらエラーを返したい のですが、方法がわかりません。 そもそもpreg_matchをつかうのか、eregを使うのか・・・ どうか、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのエラーチェックについて

    PHP 初心者デス。よろしくお願いします。 勉強のため、PHPにてメールフォームを作成してます。 PHPでのエラーチェックについて教えていただきたいのですが、 よろしくお願いします。 メールフォーム自体は下記のような流れで作成しております。 ------------------------------------------- 入力フォーム(index.php) ↓(check.php エラーチェック用ファイルとおる) 確認画面表示(confirm.php) ↓(send.php 送信処理がかかれたファイルとおる) 完了画面表示(thanks.html) ------------------------------------------- エラーチェックはindex.phpで必須項目などが、未入力、空白があれば、 送信ボタンを押した際に、index.php自体の入力フォームの下などに 「未入力です」などのエラー表示をさせたいのですが、うまくいきません。 ご教授お願いいたします。 できればSESSIONなどを使用せず行いたいですが可能でしょうか? とりあえず自力でやって、うまくいかなかったのは以下内容です。 --------------------------------------------------- check.phpにエラーチェック用処理を記載しており、index.phpのフォームには <form method="post" action="check.php"> としてます。 ですが、これだともちろんエラー表示はchek.phpに表示されてしまい、 うまくindex.phpにエラー表示ができません。 またindex.phpに入力した内容をconfirm.phpにPOSTで渡せなかったりします。 index.phpにincludeなどでchek.phpを読み込ませて、 <form method="post" action="confirm.php"> としてみても、 うまくエラーチェックが動作しなかったり、 index.phpに入力した内容をconfirm.phpにPOSTで渡せなかったり、 苦労してます。 どうかご教授のほど、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpエラーについて

    おはようございます。 PHPにて掲示板を作成しています。 (全文は文字数制限にて掲載することができなかったため、主要な部分を掲載しております) 一通り作成した後、 ブラウザから参照したところ、 Parse error: parse error, unexpected ';', expecting '{' in /***/***.php on line 44 が出力されました。 line 44行目は「function convstr ( $str );」の行を指します。 この場合、問題となっているのは、 44行目から 57行目の間と考えてよろしいのでしょうか? もし、違っていたとするならば、どこまで追っていけばよろしいのでしょうか? また、errorに対するデバッグ手法がありましたら、 具体的な手法を教えて頂けないでしょうか? 例:printfを*行目にprint()の構文で設置する。 どうぞよろしくお願いします。 42:<?php 43: //タグ無効化等の処理をする関数 44: function convstr ( $str ); 45: { 46: //タグを無効化する 47: $str = htmlspecialchars ( $str ); 48: 49: //「'」「"」を全角に置換する 50: $str = stripslashes ( $str ); 51: $str = ereg_replace ( "'", "’", $str ); 52: $str = ereg_replace ( """, "”", $str ); 53: 54: //文字列内の改行を<br>に変換する 55: $str = ereg_replace ("\r\n|\r|\n", "<br>", $str); 56: return $str; 57: } 58: 59: //DBに接続する 60: $conn = mysql_connect ( "localhost", "root", "mysql" ); 61: if ( $conn == false ) 62: { 63: print ( "DB接続エラーです<br>\n" );

    • ベストアンサー
    • PHP
  • PHPにおける正規表現について

    PHPにおける正規表現について ご教授ください。 いわゆる、対象の文字列が複数行にわたっていた場合のことです。 $data = <<< EOF ABCDE FGH EOF; $hoge = preg_match("/EF/" ,$data,$match); と上記のようなコードがあった場合 対象の文字列群から【EF】という文字列を検索したい場合、どのように記述したら 【E(間に改行)F】の文字列と一致させる事ができるでしょうか? 仮に正規表現の修飾子の【s】や【m】を用いても上記の例の場合 一致させることができないと思います。 やはり、対象の文字列群 $data の改行文字をいったん削除したものから検索 するのがベターでしょうか? 正規表現に造詣の深い方よろしくご教授ください。

    • ベストアンサー
    • PHP
  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • Perlのエラー検出法など

    Perlを使ってPGすることがありますが、 この言語を使っていますと、VBなどに慣れているせいか 開発スピードが遅く感じます。 エラーが出たら、どこでエラーが出てるかわかりにくい ですし、ちょっとしたことでエラーになります。 ただ、私のデバッガも悪いのかも知れません。 プロンプトを使わず、サーバー上でエラーが出ていない か確かめています。 Perlは実際のところどうなのでしょうか? PHPなどに変える方がよいのでしょうか? PHPは使ったことがないのですが、 PHPに移行したとしても開発ツールがVBのように よくなければあまり意味がないように感じます。 Perlの複雑さも少し取り付かれています。 質問したいことは、 Perlの利点 デメリット デバッガ法 ほかの便利な言語 などです。 Perlが不便な言語だという私の考えが 間違っているような気もしています。 ご意見頂ければ幸いです。

    • ベストアンサー
    • Perl
  • 文字数の正規表現について

    perlであるフォームから数字だけ(4桁)入力してもし4個以外の文字だったらエラー表示としたいのですが if($valueが4個の文字数でないとき){エラー} とした場合($valueが4個の文字数でないとき)の部分はどのように表現す れば良いでしょうか?

    • ベストアンサー
    • CGI