以下のように、英数字以外の文字列の次にスペースがある場合、そのスペースを削除するPHPプログラムを考えています。エディタ上の正規表現では問題ないものの、こうやってPHPのプログラムにして実行すると、文字化けしてしまいます(プログラムの文字エンコードはUTF-8です)


どのようにすれば、この問題が解決できるか教えてください。

<?php

$str = "二 一 教 育 の 目 標 と も に 健 康 な 国 民 の 育 成 を 期 し て 行 わ れ な け れ ば な ら な い も の と す る こ と 。 ( 第 一 条 関 係 ) 教 育 は 、 人 格 の 完 成 を 目 指 し 、 平 和 で 民 主 的 な 国 家 及 び 社 会 の 形 成 者 と し て 必 要 な 資 質 を 備 え た 心 身 1 幅 広 い 知 識 と 教 養 を 身 に 付 け 、 真 理 を 求 め る 態 度 を 養 い 、 豊 か な 情 操 と 道 徳 心 を 培 う と と も に 、 健 る も の と す る こ と 。 ( 第 二 条 関 係 ) 教 育 は 、 そ の 目 的 を 実 現 す る た め 、 学 問 の 自 由 を 尊 重 し つ つ 、 次 に 掲 げ る 目 標 を 達 成 す る よ う 行 わ れ";

$txt = preg_replace("/([^a-zA-Z0-9])\s+/", "\1", $str);

echo $txt;

?>

回答の条件
  • 1人2回まで
  • 登録:2008/10/12 23:13:16
  • 終了:2008/10/13 00:51:12

ベストアンサー

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/10/12 23:42:42

ポイント60pt

"\1" ではなく "$1"。ついでに utf8 指定子 u をパターンに付ける。

<?php
$str = "二 一 教 育 の 目 標 と も に 健 康 な 国 民 の 育 成 を 期 し て 行 わ れ な け れ ば な ら な い も の と す る こ と 。 ( 第 一 条 関 係 ) 教 育 は 、 人 格 の 完 成 を 目 指 し 、 平 和 で 民 主 的 な 国 家 及 び 社 会 の 形 成 者 と し て 必 要 な 資 質 を 備 え た 心 身 1 幅 広 い 知 識 と 教 養 を 身 に 付 け 、 真 理 を 求 め る 態 度 を 養 い 、 豊 か な 情 操 と 道 徳 心 を 培 う と と も に 、 健 る も の と す る こ と 。 ( 第 二 条 関 係 ) 教 育 は 、 そ の 目 的 を 実 現 す る た め 、 学 問 の 自 由 を 尊 重 し つ つ 、 次 に 掲 げ る 目 標 を 達 成 す る よ う 行 わ れ";

$txt = preg_replace("/([^a-zA-Z\d])\s+/u", "$1", $str);

echo $txt;
id:leva

ありがとうございます。おかげさまで上手く変換できました。

2008/10/13 00:51:02

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません