17

私はスウェーデン語のウェブサイトを作成していますが、スウェーデン語の文字は å、ä、ö です。

ユーザーが入力した文字列を PHP で URL セーフにする必要があります。

基本的に、これらを除くすべての文字をアンダースコアに変換する必要があります。

 A-Z, a-z, 1-9

すべてのスウェーデン語は次のように変換する必要があります。

'å' を 'a' に、'ä' を 'a' に、'ö' を 'o' に (上のドットを削除するだけです)。

私が言ったように、残りはアンダースコアになるはずです。

私は正規表現が苦手なので、助けていただければ幸いです。

ありがとう

注:URLENCODEではありません...データベースに保存する必要があります...など、urlencodeは機能しません。

4

9 に答える 9

23

iconvを使用して文字列を特定のエンコーディングから ASCII に変換し、 preg_replaceを使用して英数字以外の文字を置き換えます。

$input = 'räksmörgås och köttbullar'; // UTF8 encoded
$input = iconv('UTF-8', 'ASCII//TRANSLIT', $input);
$input = preg_replace('/[^a-zA-Z0-9]/', '_', $input);
echo $input;

結果:

raksmorgas_och_kottbullar
于 2009-11-20T13:21:28.033 に答える
13
// normalize data (remove accent marks) using PHP's *intl* extension
$data = normalizer_normalize($data);

// replace everything NOT in the sets you specified with an underscore
$data = preg_replace("#[^A-Za-z1-9]#","_", $data);
于 2009-11-20T13:02:50.343 に答える
8

すべてのスウェーデン語は次のように変換する必要があります。

'å' を 'a' に、'ä' を 'a' に、'ö' を 'o' に (上のドットを削除するだけです)。

分音記号normalizer_normalize()を取り除くために使用します。

私が言ったように、残りはアンダースコアになるはずです。

(iow: 文字、数字、またはアンダースコアと一致しない任意の文字)preg_replace()のパターンで使用して、それらをアンダースコアに置き換えます。[\W]

最終結果は次のようになります。

$data = preg_replace('[\W]', '_', normalizer_normalize($data));
于 2009-11-20T12:56:38.530 に答える
4

URL を安全にすることだけに関心がある場合は、urlencode.

-_ を除くすべての英数字以外の文字を含む文字列を返します。パーセント (%) 記号に置き換えられ、その後に 2 つの 16 進数とプラス (+) 記号としてエンコードされたスペースが続きます。これは、WWW フォームから投稿されたデータがエンコードされるのと同じ方法でエンコードされます。つまり、application/x-www-form-urlencoded メディア タイプと同じ方法です。これは » RFC 1738 エンコーディング (rawurlencode() を参照) とは異なり、歴史的な理由から、スペースはプラス (+) 記号としてエンコードされます。

AZ、az、1 ~ 9 以外のすべてを削除したい場合 (0ちなみに、何が問題なのですか?)、次のようにします。

$mynewstring = preg_replace('/[^A-Za-z1-9]/', '', $str);
于 2009-11-20T12:53:16.343 に答える
2

単純な

 $str = str_replace(array('å', 'ä', 'ö'), array('a', 'a', 'o'), $str); 
 $str = preg_replace('/[^a-z0-9]+/', '_', strtolower($str));

データとコードに同じエンコーディングを使用すると仮定します。

于 2009-11-20T13:03:06.823 に答える
1

簡単な解決策の 1 つは、str_replace関数を文字配列の検索と置換で使用することです。

于 2009-11-20T13:02:01.593 に答える
0

スウェーデン語の文字をフィルタリングするための派手な正規表現は必要ありません。次のように、strtr 関数を使用してそれらを「翻訳」するだけです。

$your_URL = "www.mäåö.com";
$good_URL = strtr($your_URL, "äåöë etc...", "aaoe etc...");
echo $good_URL;

-> 出力: www.maao.com :)

于 2009-11-20T13:02:59.843 に答える