データベース サイト用のクリーンな URL を作成したいのですが、それぞれのエントリの URL を格納するフィールドを作成するのが最善の方法であると判断しました。
GenerateUrl 関数 (ここにあります) を使用して、ソース名からクリーンな URL を作成しています:-
function GenerateUrl ($s) {
// Convert accented characters, and remove parentheses and apostrophes
$from = explode (',', "ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u,(,),[,],'");
$to = explode (',', 'c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u,,,,,,');
// Do the replacements, and convert all other non-alphanumeric characters to spaces
$s = preg_replace ('~[^\w\d]+~', '-', str_replace ($from, $to, trim ($s)));
// Remove a - at the beginning or end and make lowercase
return strtolower (preg_replace ('/^-/', '', preg_replace ('/-$/', '', $s)));
}
アポストロフィに問題がありますが、ほとんどの場合うまく機能します。
引用符として使用すると (つまり、片側で別の文字に触れるだけ)、正常に機能します:-「エッフェル塔 (パリ)」が URL になります:eiffel-tower-paris
しかし、実際のアポストロフィとして使用されている (つまり、2 つの文字に挟まれている) ため、あまり適切ではありません:- St Paul's Cathedral (London) は URL になります:st-paul-s-cathedral-london
PHP 5.4.3 を使用しており、マジック クォートの変更を元に戻すコードがあります (これが問題の原因である必要があります)。
これを解決するためのアドバイスは大歓迎です。
ありがとう、
アンディ
はい、希望する URL は次のとおりです。st-pauls-cathedral-london
DOES が機能する元の関数コードを見つけたところです ($from 行と $to 行の末尾のアポストロフィは、それぞれ何も置き換えられません)。
ただし、ページ上でライブの名前に関数を適用した場合にのみ機能するようです。
<?php echo generateurl($attraction['attraction_name']); ?>
しかし、私が現在行っているのは、データが Web サイトに入力されたときに index.php ファイル内の関数を適用することです。問題は、(魔法の引用符を処理するために) 以下の関数が既に適用されている値に関数を適用しているという事実から来ていると思われます:-
$attraction_name = mysqli_real_escape_string($link, $_POST['attraction_name']);
$attraction_url = generateurl($attraction_name);
mysqli_real_escape_string の影響を受ける前に、attraction_name から URL を生成するために、いくつかのコーディングを変更する必要があると思います。乗り方を教えてくれる...