6

たくさんのデータベースレコード(auto_increment IDなどを含まない)をリストとしてレンダリングしましたが、それぞれを一意ので区別する必要があることがわかりましたid

実行中のカウンターをループに追加してそれで済ませることもできますが、残念ながら、このIDはサイト全体で相互参照可能である必要がありますが、リストは順序付けまたはフィルター処理されます。

そのため、レコードタイトルをid(レイアウト要素と衝突しないようにプレフィックスを付けて)の一部として含めることを思いつきました。

idHTMLを壊したり、有効なCSSセレクターとして機能しなかったりする文字が文字列に含まれないように、文字列を確実な方法で名前に変換するにはどうすればよいですか?

例えば;

Title ==> prefix_title
TPS Report 2010 ==> prefix_tps_report_2010
Mike's "Proposal" ==> prefix_mikes_proposal
#53: Míguèl ==> prefix_53_miguel

タイトルは常に競合を避けるために十分に多様であり、西洋以外の文字が含まれることはありません。

ありがとう!

4

3 に答える 3

7

Deeplink Anchors にも同様のソリューションが必要でした。

これは便利だと思いました:

function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    //Clean up multiple dashes or whitespaces
    $string = preg_replace("/[\s-]+/", " ", $string);
    //Convert whitespaces and underscore to dash
    $string = preg_replace("/[\s_]/", "-", $string);
    return $string;
}

クレジット: https://stackoverflow.com/a/11330527/3010027

PS: Wordpress ユーザーはこちらをご覧ください: https://codex.wordpress.org/Function_Reference/sanitize_title

于 2014-05-07T12:14:58.613 に答える
0

idHTML属性を使用する必要はまったくありません。HTML5 の data-* 属性を使用して、ユーザー定義の値を保存できます。次に例を示します。

<ul class="my-awesome-list">
    <!-- PHP code, begin a for/while loop on rows -->
    <li data-rowtitle="<?php echo json_encode($row["title"]); ?>">
        <?php echo $row["title"]; ?>
    </li>
    <!-- PHP loop end -->
</ul>

$.fn.data次に、jQuery コードで、メソッドを使用して data-* 値にアクセスできます。

$(".my-awesome-list li").each(function(){
     var realTitle = $(this).data('rowtitle');
});
于 2012-05-16T13:33:10.667 に答える