
PHP5.2.4を使用しています。
CakePHPというフレームワークの中の関数で、次のような
Warning (2): preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 6
という警告がでるのですが、preg_replace関数の第4引数を指定してないからなのかな?と思い、
1という数字を指定してみたりしたのですが、同じような警告が出てしまいます・・・
たぶんバージョン間の違いだと思いますが、
この場合は、たとえば警告を出さないフラグを変更する以外に
preg_replace関数をどのように記述すれば良いのでしょうか?
function slug($string, $replacement = '_') {
if(!class_exists('String')) {
require_once LIBS . 'string.php';
}
$map = array(
'/a|a|a|a/' => 'a',
'/e|e|e|?|e/' => 'e',
'/i|i|i/' => 'i',
'/o|o|o|o/' => 'o',
'/u|u|?|u/' => 'u',
'/c/' => 'c',
'/n/' => 'n',
'/a|a/' => 'ae',
'/o/' => 'oe',
'/u/' => 'ue',
'/A/' => 'Ae',
'/U/' => 'Ue',
'/O/' => 'Oe',
'/s/' => 'ss',
'/[^\w\s]/' => ' ',
'/\\s+/' => $replacement,
String::insert('/^[:replacement]+|[:replacement]+$/', array('replacement' => preg_quote($replacement, '/'))) => '',
);
/*
print "string=$string<br>\n";
print_r(array_keys($map));
print_r(array_values($map));
*/
$string = preg_replace(array_keys($map), array_values($map), $string);
return $string;
}
string=test<br>
Array
(
[0] => /a|a|a|a/
[1] => /e|e|e|?|e/
[2] => /i|i|i/
[3] => /o|o|o|o/
[4] => /u|u|?|u/
[5] => /c/
[6] => /n/
[7] => /a|a/
[8] => /o/
[9] => /u/
[10] => /A/
[11] => /U/
[12] => /O/
[13] => /s/
[14] => /[^\w\s]/
[15] => /\s+/
[16] => /^[_]+|[_]+$/
)
Array
(
[0] => a
[1] => e
[2] => i
[3] => o
[4] => u
[5] => c
[6] => n
[7] => ae
[8] => oe
[9] => ue
[10] => Ae
[11] => Ue
[12] => Oe
[13] => ss
[14] =>
[15] => _
[16] =>
)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>この関数があるページを開くと、すでにその表示なんです・・・
そのエディタの内部処理がShift_JISで行われている何よりの証拠です
>正しく表示されているのか
正しく表示されていません
本来はそれぞれ別個のeの上に点などが付いたeに良く似た文字です
EmEditorやxyzzyを使って開いてください
何を問題としているのか分かるはずです
ご返答ありがとうございます。
EmEditorで表示してみたら、ちゃんとそれらしい表示がされました。
自分は普段、PHPエディタver1.78.1を使用していて、
これでUnicodeで取り込んでみたり試したのですが、
その通り表示されませんでした・・・
このPHPエディタでその通り表示させることは可能なのでしょうか?
それと、cake_1.2.0.7296-rc2で他にもこのような表示バグ(動作に影響ある)
がある個所はあるのでしょうか?
この2つ(PHPエディタとCakePHP)について
もしご存知でしたら教えてもらえないでしょうか?
No.1
- 回答日時:
エラーそのものの原因は正規表現がおかしくなっているからです、が
>e|e|e|?|e
>u|u|?|u
この2行ですが、もっと根本的に簡単な解決は「inflector.phpを編集しないで元のまま使ってください」
その部分の記述は思いっきりUnicodeで書かれていますが、Unicode対応と言いながら実は内部でShift-JISで編集しているようなテキストエディタ(Terapadなどなど)を使って編集するとその部分が?になってしまいます
実際にはその2行(他の行もですが)はこう記述されています
(もしかすると正しく表示されないかも)
'/è|é|ê|ẽ|ë/' => 'e',
'/ù|ú|ů|û/' => 'u',
ご返答ありがとうございます。
こちらのエディタではUTF-8で編集していて、
編集する以前に「cake_1.2.0.7296-rc2.zip」を解凍して
この関数があるページを開くと、すでにその表示なんです・・・
これは元のコードに原因があるのでしょうか?
最悪、preg_replaceをせずにそのまま$stringを返してしまっても
しょうがないと妥協することも考えているのですが、
それをやると動作に致命的な影響などはあるのでしょうか?
ちなみにdummさんが表示した2行は、正しく表示されているのか確認をお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
PHP8を使うと、大量のWarningが...
-
セッション関数を使わずにファ...
-
composerをインストールしたい...
-
php 完了画面の送信メールのコ...
-
csvファイルについて教えて下さ...
-
PHPの変わった閉じタグの必要性...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
順位を付ける時のスコアの重複...
-
cakephp2.6でfindを使い合計値...
-
「ローマ字 -> ひらがな」へPHP...
-
Zend_Form_Element_Hash
-
xmlからphpで出力したデータを...
-
1~100の数字の9の倍数だけ同じ...
-
月一覧を取得するには?(20120...
-
codeigniterのページネーション...
-
file_get_contentsなどでrefere...
-
PHP 別ドメインへのファイル保存法
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
C言語の配列をPush(追加)する...
-
Resource id #3 と表示されま...
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
CArrayのソート
-
PHPのカッコ[ ]の使い方について
-
String だと「 ByRef引数の型が...
おすすめ情報