回答:
function drupal_urlencode($text) {
if (variable_get('clean_url', '0')) {
return str_replace(array('%2F', '%3F', '%3D', '%26', '%2523'),
array('/', '?', '=', '&', '#'),
urlencode($text));
}
else {
return str_replace('%2F', '/', urlencode($text));
}
}
つまり、これが実際に行った処理であり、前処理やオーバーライドは必要ありません。これについて助けてくれたAcquiaのPeter Bullに感謝します。
HTMLを書き換えるためにいくつかの追加のViewsフィールドでこれを処理しました。
「表示から除外」を選択して「詳細リンク」を削除することを除いて、現在の用語と同じように、用語の説明に追加フィールドを追加しました。
フィールドの順序を変更して、新しい用語説明フィールドが既存のフィールドの前にロードされるようにしました。
元の用語の説明フィールドを編集しました。[このフィールドの出力を書き換える]をオンにして、新しいフィールドのトークンをテキストエリアに配置し、リンクのHTMLを追加します。したがって、HTML出力を次のように書き換えます。
[token-for-new-term-description-field] <a href="https://drupal.stackexchange.com/mypagewiththeview#training-block-[counter]" class="foo">more</a>
次に、上記の書き換えに含まれていたmoreリンクを削除しました。
この回避策により、説明フィールドのトリミングされた出力が保持され、l()およびcheck_plain()を介してそのパスを実行しなくても、アンカー内の適切なカウンターIDを使用してリンクをレンダリングできます。
また、リンクの先頭に/を付ける必要があるため、ルート相対です。l()を介して渡されないため、自動的には行われません。また、このビューページにdocrootからの相対パスがない場合、リンクが壊れる可能性があります。
わーい!
$url = l(t("title of your page"),"$link_url",array('fragment' => 'hash url without #'));
最初の引数はページのタイトルです
2番目の引数は$ link_urlはexを意味します。www.google.com/link_url。
そして最後は、この配列のフラグメントの配列です。#の後に渡したいリンクを渡すことができます。
例:http://domain.com/india#rajkot なので、他の変換をエンコードまたはデコードする必要はありません
完全な構文は
l(t('My Anchor Link'), '', array(
'fragment' => ' ',
'external' => TRUE,
'attributes' => array(
'title' => 'Title here.'
),
));
?>