1

ウィジェットの製品配列があります。

一部のウィジェットには、名前に予約済みのピリオド記号が含まれています。

この問題は、php がピリオドに一致すると発生し、残りのウィジェット名は無視されます。ピリオド記号が干渉しないように、ウィジェットを文字列リテラルとして読み取るにはどうすればよいですか?

unset($products[$widget]);
                  

ピリオドをプレースホルダー文字に置き換えて、予約文字にしないようにすることもできますが、そうしないことをお勧めします。

4

2 に答える 2

3

それらの名前の正規化された値をキーとして使用し、実際のウィジェット名を値として使用します。

例:

function slug($str)
{
    $str = strtolower(trim($str));
    $str = preg_replace('/[^a-z0-9-]/', '-', $str);
    $str = preg_replace('/-.+/', "-", $str);
    return $str;
}

$products[slug($widget)] = $widget;
于 2010-02-22T19:08:32.927 に答える
0

私は間違ったいくつかの仮定をしました。ウィジェット名にはポンド記号も含まれていますが、#記号がコードに影響を与えることを知らなかったため、言及しませんでした。

しかし、結局のところ、ポンド記号が問題の原因でしたが、unsetコマンドを使用した場合はそうではありませんでした。

$_GET['']を使用してURLを介してウィジェットの名前を渡しました。どうやら受信getは#シンボルが好きではなく、ポンド#シンボルの後のすべてを削除します。

ここに簡単な説明があります。すっごく…ウィジェット名「crank#x.55」を渡したとしましょう。$ _GET変数をエコーすると、「crank」が表示され、残りの「#x.55」が削除されます。

URLを見ると、「crank#x.55」(完全なウィジェット名)が表示され、$_GET変数に正しく送信されたと思われます。ピリオド(連結)記号は、設定されていない状態で実行したときに何か厄介なことをしていると思ったので、元の質問を作成しました。(私は将来の質問のためにもっと多くの事実を含める必要があることを知っています)<-学習プロセス。

ポンド記号を@記号に置き換えるだけで問題を解決し、データが投稿されたら、preg_replaceを使用して@記号をポンドに変換し直します。pixelineの答えと同様に、私の目的に少し適合させました。

ありがとう

于 2010-02-23T14:21:56.957 に答える