1

スラッグを作ろうとしています。私の文字列は次のようなものです:$string='möbel#*-jérôme-mp3-how?';

ステップ1

まず、この文字列から特殊文字、非英数字および非ラテン文字を削除します。

このような:$string='möbel-jérôme-mp3-how';

以前は、文字列に英字のみを使用していました。

だから、私はこのようにしていた:$string = preg_replace("([^a-z0-9])", "-", $string);

しかし、外国語の文字も保持したいので、これではうまくいきません。

ステップ2

次に、1 つ以上の数字を含む単語をすべて削除します。

この例の文字列では、1 つ以上の数字が含まれているため、単語 mp3 を削除します。

したがって、最終的な文字列は次のようになります。$string='möbel-jérôme-how';

私はこのようにしていた:

$words = explode('-',$string);
$result = array();

foreach($words as $word) 
{
if( ($word ==preg_replace("([^a-z])", "-", $word)) && strlen($word)>2)  
$result[]=$word;
}
$string = implode(' ',$result);

外国の文字が含まれているため、これは現在機能しません。

4

3 に答える 3

2

リンクに対してスラッグを実際に実行している場合は、Unicode文字を音訳することを強くお勧めします。PHPのiconvを使用してそれを実現できます。


ここで同様の質問。投票数の多い回答の創意工夫とシンプルさは素晴らしいと思います:)

于 2012-11-30T13:36:32.643 に答える
2

PHP では、Unicode プロパティにアクセスできます。

$result = preg_replace('/[^\p{L}\p{N}-]+/u', '', $subject);

がステップ 1 を行います。(\p{L}は任意の Unicode 文字に\p{N}一致し、任意の Unicode 数字に一致します)。

数字を含む単語を削除するのも簡単です:

$result2 = preg_replace('/\b\w*\d\w*\b-?/', '', $result);

(\b単語の最初と最後に一致します)。

于 2012-11-30T13:27:26.263 に答える
0

これを複数の手順で行うことをお勧めします。

  1. 許可された文字 (すべて) の文字列を作成し、それらだけを保持して文字列を調べます。(時間はかかりますが1回限りです)

  2. 爆発し-てすべての単語を調べ、数字を含まない単語だけを残します。その後、再び内破します。

これからは自分でスクリプトを書くことができると思います。

于 2012-11-30T13:26:25.070 に答える