
こんにちは。お世話になっております。
先日、http://oshiete1.goo.ne.jp/qa4951480.html にて、質問させていただき、状況こそ違うのですが、変数に代入された文字列から、事前に登録された単語や記号を削除すると、変数に代入された文字列に一部文字化けが起こる現象が続いています。
※前回の質問では、str_replaceにて指定文字を削除していましたが、str_ireplaceの方が文字化けの頻度が少ない。
色々と試行錯誤を繰り返しながら、その対策を試しているのですが、一向に改善する兆しがなく困っている状況です。
ちなみに、事前に登録された単語や記号とは、別ページにて、入力されたフォームからデータをPOSTにて受け取り、以下のようなスクリプトで登録を行っています。
//$keyword = trim($keyword).PHP_EOL;
$keyword = trim($keyword)."\n";
$file = fopen($file_name, "a") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
fputs($file, $keyword);
flock($file, LOCK_UN);
fclose($file);
chmod($file_name,0606);
そこで、削除したい単語をブラウザで表示(tableを使って表示)してみたところ、登録されている単語の末尾に、半角スペースがある状況です。
これは以前にも他のプログラムでも気づいてはいたのですが、今回のように不具合が一向に直らない状況で、「もしかしたらこれも原因の1つ?」と気になり質問させてもらいました。
少々回りくどい質問、かつ説明が足りないところがあるかと思いますが、この半角スペースの件、ならびに、このような状況の文字化けに関して、アドバイスなど頂戴出来れば幸いです。宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
文字化け?
つまり日本語を使っているのかな?
もしそうならその 4951480 の質問で回答してくれている mb_* を使っていないからだと思うけど?
マルチバイト文字が何であるかをまず知った方が良いんじゃないのかなぁ…
http://www.google.com/search?lr=lang_ja&q=%E3%83 …
SAYKA様
こんばんは。早速のアドバイスを有難う御座います。
変数に代入されている文字列は日本語なのですが、別ファイルに登録してある削除したい単語は、半角英数字、または全角英数となっています。
ご忠告後、前回ご回答下さったように、mb_ereg_replaceを試していますが、一部の半角記号を削除しようとすると、mb_ereg_replaceの部分でエラーが出てしまうのですが、この場合は削除したい単語がバイト数などで判別して使い分けた方が良いのでしょうか?
何か対処法がありましたら、引き続きアドバイスいただけたら幸いです。宜しくお願いいたします。
No.2
- 回答日時:
>全角英数
しつこいようだけど マルチバイトについて 調べた方が良いよ。
>mb_ereg_replaceの部分でエラーが出てしまう
「エラーが出る」って言われてもそれだけじゃ流石に情報が足りないよ・・・。
どんな正規表現文字列を使ってどんなエラーなのか、それが判らないと「正規表現がおかしいだけでしょ」としか言いようが無いからね。
そういう意味では mb_* は無関係に正規表現がおかしいだけかもしれない・・・
SAYKA様
おはようございます。
>「エラーが出る」って言われてもそれだけじゃ流石に情報が足りないよ・・・。
仰るとおりです。すみません。汗
mb_ereg_replaceですが、別ファイルに登録のある単語を削除するために
$f_data_array = file($file_name);
$f_cnt= count($f_data_array);
for($h=0; $h<$f_cnt; $h++){
$delete_key = trim($f_data_array[$h]);
$data = mb_ereg_replace($delete_key, " ", $data);//半角角スペースに置き換えている
}
としているのですが、そうすると以下のようなエラーが表示される状況です。
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: premature end of char-class in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: target of repeat operator is not specified in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: end pattern at escape in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: end pattern with unmatched parenthesis in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: unmatched close parenthesis in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: target of repeat operator is not specified in
で、前回のお礼のご挨拶のときにも書きましたが、for文の中で削除する際、その単語をバイト数で分別して、
if(strlen($delete_key) >= 2){
$data = mb_ereg_replace($delete_key, " ", $data);//全角スペースに置き換えている
}else{
$data = str_ireplace($delete_key, " ", $data);//全角スペースに置き換えている
}
このようにすると、とりあえず?不具合は回避出来るようになったのですが、このようなスクリプトってやはり効率は悪いのでしょうか・・。
(前回の質問時にアドバイスいただいたforeachに関しては、今回の問題が解決できてからと思ってます)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IT企業の技術屋にとって全角英...
-
エクセルのCOUNTIFが正しくカウ...
-
PPT ファイルの文字カウント=...
-
記号は半角と全角どちらがよい...
-
全角英数字のみ半角英数字にす...
-
全角括弧と全角読点の間隔を狭...
-
HTML5の「pattern」属性で前後...
-
VBAのコマンドボタンの文字列の...
-
テキストボックスの回転
-
エスケープ文字の復帰(¥r)と...
-
\\nと\\rの違い
-
改行について
-
JavaDoc コメントの改行について
-
文字コードの検出が正しいかを...
-
テキストボックス行の桁数を制...
-
1行ごとに取得して、その改行...
-
Excel VBAからBeckyを起動して...
-
テキストファイルから改行コー...
-
文字列のアスタリスク置換
-
ダブルコーテーション(
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
エクセルのCOUNTIFが正しくカウ...
-
全角括弧と全角読点の間隔を狭...
-
特定の文字を簡単な操作で半角...
-
エクセルでの漢字、カタカナ、...
-
VBAで英数字入力チェックしたい。
-
XMLのタグ名の禁則文字
-
Phonetic関数を利用して文章中...
-
全角英数文字が嫌われる理由を...
-
半角記号、全角記号を含む正規...
-
半角スペース の文字化け...
-
Replace関数は文字数の制限ある...
-
パソコンで全角、半角文字の切...
-
記号は半角と全角どちらがよい...
-
2つ以上の連続する空白文字を除去
-
文字列中の両丸括弧を取り除くV...
-
バッチファイル 全角検索
-
半角英数文字を全角英数文字に...
おすすめ情報