本文整理汇总了PHP中hs函数的典型用法代码示例。如果您正苦于以下问题:PHP hs函数的具体用法?PHP hs怎么用?PHP hs使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了hs函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: wordForMatch
/**
* フォームから送られてきたワードをマッチ関数に適合させる
*
* @static
* @access public
* @return string $word_fm 適合パターン。SJISで返す。
*/
function wordForMatch($word, $method = 'regex')
{
$word_fm = $word;
// 「そのまま」でなければ、全角空白を半角空白に矯正
if ($method != 'just') {
$word_fm = mb_convert_kana($word_fm, 's');
}
$word_fm = trim($word_fm);
$word_fm = htmlspecialchars($word_fm, ENT_NOQUOTES);
if (in_array($method, array('and', 'or', 'just'))) {
// preg_quote()で2バイト目が0x5B("[")の"ー"なども変換されてしまうので
// UTF-8にしてから正規表現の特殊文字をエスケープ
$word_fm = mb_convert_encoding($word_fm, 'UTF-8', 'SJIS-win');
if (P2_MBREGEX_AVAILABLE == 1) {
$word_fm = preg_quote($word_fm);
} else {
$word_fm = preg_quote($word_fm, '/');
}
$word_fm = mb_convert_encoding($word_fm, 'SJIS-win', 'UTF-8');
// 他、regex(正規表現)なら
} else {
$word_fm = str_replace('/', '\\/', $word_fm);
$tmp_pattern = '/' . mb_convert_encoding($word_fm, 'UTF-8', 'SJIS-win') . '/u';
if (false === @preg_match($tmp_pattern, '.')) {
P2Util::pushInfoHtml(sprintf('p2 warning: フィルタ語句の正規表\現に誤りがあります "%s"', hs($word_fm)));
$word_fm = '';
}
if (P2_MBREGEX_AVAILABLE == 0) {
$word_fm = str_replace('/', '\\/', $word_fm);
}
// 末尾のワイルドカードは除去してしまう
$word_fm = rtrim($word_fm, '.+*');
}
return $word_fm;
}
示例2: getShinchakuMatomeATag
/**
* 新着まとめ読み <a>
*
* @return string HTML
*/
function getShinchakuMatomeATag($aThreadList, $shinchaku_num)
{
global $_conf;
static $upper_toolbar_done_ = false;
$shinchaku_matome_atag = '';
// 倉庫なら新着まとめのリンクはなし
if ($aThreadList->spmode == 'soko') {
return $shinchaku_matome_atag = '';
}
$attrs = array();
if (UA::isIPhoneGroup()) {
$attrs['class'] = 'button';
}
// 上下あるツールバーの下だけにアクセスキーをつける
if ($upper_toolbar_done_) {
$attrs[$_conf['accesskey_for_k']] = $_conf['k_accesskey']['matome'];
}
$upper_toolbar_done_ = true;
$qs = array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, 'spmode' => $aThreadList->spmode, 'nt' => date('gis'), UA::getQueryKey() => UA::getQueryValue());
$label = "{$_conf['k_accesskey']['matome']}.新まとめ";
if ($shinchaku_num) {
$shinchaku_matome_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_new_k_php'], array_merge($qs, array('norefresh' => '1'))), hs("{$label}({$shinchaku_num})"), $attrs);
} else {
$shinchaku_matome_atag = P2View::tagA(UriUtil::buildQueryUri($_conf['read_new_k_php'], $qs), hs($label), $attrs);
}
return $shinchaku_matome_atag;
}
示例3: getResetReadNaviFooterK
/**
* フィルタ用に書き換えたフッタ変数を取得する
*
* @access public
* @return array array(read_navi_previous_btm_ht, read_navi_next_btm_ht, read_footer_navi_new_btm_ht)
*/
function getResetReadNaviFooterK($aThread, $params)
{
global $_conf;
global $_filter_hits, $_filter_range;
// $prev_st, $next_st, $filter_page, $res_filter
extract($params);
// {{{ 検索クエリ
$filter_qs = array('detect_hint' => '◎◇', 'host' => $aThread->host, 'bbs' => $aThread->bbs, 'key' => $aThread->key, 'offline' => 1, 'word' => $GLOBALS['word'], 'ls' => 'all', UA::getQueryKey() => UA::getQueryValue());
foreach ($res_filter as $key => $value) {
$filter_qs[$key] = $value;
}
// }}}
if ($filter_page > 1) {
$qs = array_merge($filter_qs, array('filter_page' => $filter_page - 1));
$read_navi_previous_url = UriUtil::buildQueryUri($_conf['read_php'], $qs);
$read_navi_previous_btm_ht = sprintf('<a %1$s="%2$s" href="%3$s">%2$s.%4$s</a>', hs($_conf['accesskey_for_k']), hs($_conf['k_accesskey']['prev']), hs($read_navi_previous_url), hs($prev_st));
}
if ($_filter_range['to'] < $_filter_hits) {
$qs = array_merge($filter_qs, array('filter_page' => $filter_page + 1));
$read_navi_next_url = UriUtil::buildQueryUri($_conf['read_php'], $qs);
$read_navi_next_btm_ht = sprintf('<a %1$s="%2$s" href="%3$s">%2$s.%4$s</a>', hs($_conf['accesskey_for_k']), hs($_conf['k_accesskey']['next']), hs($read_navi_next_url), hs($next_st));
}
$read_footer_navi_new_btm_ht = '';
/*
// ※メモ:「6.新着」(新着レスの表示)と「3.新20」(最新N件)は異なる。
$read_footer_navi_new_btm_ht = str_replace(
" {$_conf['accesskey_for_k']}=\"{$_conf['k_accesskey']['next']}\"", '', $read_footer_navi_new_btm_ht
);
$read_footer_navi_new_btm_ht = str_replace(">{$_conf['k_accesskey']['next']}.", '>', $read_footer_navi_new_btm_ht);
*/
return array('read_navi_previous_btm_ht' => $rread_navi_previous_btm_ht, 'read_navi_next_btm_ht' => $read_navi_next_btm_ht, 'read_footer_navi_new_btm_ht' => $read_footer_navi_new_btm_ht);
}
示例4: _printMatomeCacheLinksHtml
/**
* 新着まとめ読みのキャッシュリンクHTMLを表示する
*
* @return void
*/
function _printMatomeCacheLinksHtml()
{
global $_conf;
$max = $_conf['matome_cache_max'];
$links = array();
for ($i = 0; $i <= $max; $i++) {
$dnum = $i ? '.' . $i : '';
$file = $_conf['matome_cache_path'] . $dnum . $_conf['matome_cache_ext'];
//echo '<!-- ' . $file . ' -->';
if (file_exists($file)) {
$filemtime = filemtime($file);
$date = date('Y/m/d G:i:s', $filemtime);
$b = filesize($file) / 1024;
$kb = round($b, 0);
$atag = P2View::tagA(UriUtil::buildQueryUri('read_new.php', array('cview' => '1', 'cnum' => "{$i}", 'filemtime' => $filemtime)), hs($date), array('target' => 'read'));
$links[] = sprintf('%s %dKB', $atag, $kb);
}
}
if ($links) {
echo '<p>新着まとめ読みの前回キャッシュを表\示<br>' . implode('<br>', $links) . '</p>' . "\n";
if ($_conf['ktai']) {
$hr = P2View::getHrHtmlK();
echo $hr . "\n";
}
}
}
示例5: hs
// レス記事 HTML表示
//==================================================================
if (UA::isK()) {
$ResHist->printArticlesHtmlK($datlines);
} else {
$ResHist->printArticlesHtml($datlines);
}
//==================================================================
// フッタHTML表示
//==================================================================
// 携帯用表示
if (UA::isK()) {
?>
<div id="footer" name="footer"><?php
$ResHist->showNaviK('footer', $datlines_num);
$atag = P2View::tagA('#header', hs($_conf['k_accesskey']['above'] . '.▲'), array($_conf['accesskey_for_k'] => $_conf['k_accesskey']['above']));
echo " {$atag}<br>";
echo "</div>";
?>
<p><?php
echo P2View::getBackToIndexKATag();
?>
</p><?php
// PC用表示
} else {
?>
<hr>
<table id="footer" width="100%" style="padding:0px 10px 0px 0px;">
<tr>
<td align="right"><?php
echo $toolbar_ht;
示例6: _addBrHtml
/**
* なんかいまいちだけど、横幅が長くなるのに対策。
*
* @return string HTML
*/
function _addBrHtml($str, $num = 28)
{
$html = '';
for ($i = 0; $i < strlen($str); $i++) {
$html .= hs($str[$i]);
if ($i && !($i % $num)) {
$html .= '<br>';
}
}
return $html;
}
示例7: printLoginFirst
/**
* p2 - 最初のログイン画面をHTML表示する関数
*
* @access public
* @return void
*/
function printLoginFirst(&$_login)
{
global $STYLE, $_conf;
global $_login_failed_flag, $_p2session;
// データ保存ディレクトリに書き込み権限がなければ注意を表示セットする
P2Util::checkDirsWritable(array($_conf['dat_dir'], $_conf['idx_dir'], $_conf['pref_dir']));
// 前処理
$_login->cleanInvalidAuthUserFile();
clearstatcache();
// 外部からの変数
$post['form_login_id'] = isset($_POST['form_login_id']) ? $_POST['form_login_id'] : null;
$post['form_login_pass'] = isset($_POST['form_login_pass']) ? $_POST['form_login_pass'] : null;
//=========================================================
// 書き出し用変数
//=========================================================
if (UA::isIPhoneGroup()) {
$ptitle = $_conf['p2name'] . 'iPhone';
} else {
$ptitle = $_conf['p2name'];
}
$ptitle_ht = hs($ptitle);
if (!empty($GLOBALS['brazil'])) {
$ptitle_ht = 'p2.2ch.net';
if (!(UA::isK() || UA::isIPhoneGroup())) {
$ptitle_ht = '<a href="http://p2.2ch.net/">' . $ptitle_ht . '</a>';
}
}
$myname = basename($_SERVER['SCRIPT_NAME']);
$body_ht = '';
$show_login_form_flag = false;
$p_str = array('user' => 'ユーザ', 'password' => 'パスワード');
if (!empty($GLOBALS['brazil'])) {
$p_str['user'] = 'メール';
}
// 携帯用表示文字列全角→半角変換
if (!UA::isIPhoneGroup() && UA::isK() && function_exists('mb_convert_kana')) {
foreach ($p_str as $k => $v) {
$p_str[$k] = mb_convert_kana($v, 'rnsk');
}
}
// 補助認証
require_once P2_LIB_DIR . '/HostCheck.php';
$mobile = Net_UserAgent_Mobile::singleton();
$auth_sub_input_ht = _getAuthSubInputHtml($mobile);
// ログインフォームからの指定
$form_login_id_hs = '';
if ($_login->validLoginId($_login->user_u)) {
$form_login_id_hs = hs($_login->user_u);
} elseif ($_login->validLoginId($post['form_login_id'])) {
$form_login_id_hs = hs($post['form_login_id']);
}
$form_login_pass_hs = '';
if ($_login->validLoginPass($post['form_login_pass'])) {
$form_login_pass_hs = hs($post['form_login_pass']);
}
// docomoの固有端末認証(セッション利用時のみ有効)
$docomo_utn_ht = '';
//if ($_conf['use_session'] && $_login->user_u && $mobile->isDoCoMo()) {
if ($_conf['use_session'] && $mobile->isDoCoMo()) {
$uri = $myname . '?guid=ON&user=' . urlencode($_login->user_u);
$docomo_utn_ht = '<p><a href="' . hs($uri) . '" utn>docomo固有端末認証</a></p>';
}
// docomoならリトライ時にパスワード入力を password → text とする
// (docomoはpassword入力が完全マスクされるUIで、入力エラーがわかりにく過ぎる)
if (isset($post['form_login_pass']) and $mobile->isDoCoMo()) {
$type = "text";
} else {
$type = "password";
}
// {{{ ログイン用フォームを生成
$ruri = $_SERVER['REQUEST_URI'];
if (UA::isDoCoMo()) {
$ruri = UriUtil::addQueryToUri($ruri, array('guid' => 'ON'));
}
$REQUEST_URI_hs = hs($ruri);
if (!empty($GLOBALS['brazil']) or file_exists($_conf['auth_user_file'])) {
$submit_ht = '<input type="submit" name="submit_userlogin" value="ユーザログイン">';
} else {
$submit_ht = '<input type="submit" name="submit_newuser" value="新規登録">';
}
$login_form_ht = <<<EOP
{$docomo_utn_ht}
<form id="login" method="POST" action="{$REQUEST_URI_hs}" target="_self" utn>
{$_conf['k_input_ht']}
{$p_str['user']}: <input type="text" name="form_login_id" value="{$form_login_id_hs}" istyle="3" size="32" autocorrect="off" autocapitalize="off"><br>
{$p_str['password']}: <input type="{$type}" name="form_login_pass" value="{$form_login_pass_hs}" istyle="3" autocorrect="off" autocapitalize="off"><br>
{$auth_sub_input_ht}
<br>
{$submit_ht}
</form>
EOP;
// }}}
//=================================================================
//.........这里部分代码省略.........
示例8: eo
function eo($s)
{
//echo+escape
echo hs($s);
}
示例9: _getMenuKLinkHtml
/**
* メニュー項目のリンクHTMLを取得する
*
* @access private
* @param array $menuKIni メニュー項目 標準設定
* @param boolean $noLink リンクをつけないのならtrue
* @return string HTML
*/
function _getMenuKLinkHtml($code, $menuKIni, $noLink = false)
{
global $_conf, $_login;
static $accesskey_ = 0;
// 無効なコード指定なら
if (!isset($menuKIni[$code][0]) || !isset($menuKIni[$code][1])) {
return false;
}
$accesskey = ++$accesskey_;
if ($_conf['index_menu_k_from1']) {
$accesskey = $accesskey + 1;
if ($accesskey == 10) {
$accesskey = 0;
}
}
if ($accesskey > 9) {
$accesskey = null;
}
$href = $menuKIni[$code][0] . '&user=' . $_login->user_u . '&' . UA::getQueryKey() . '=' . UA::getQueryValue();
$name = $menuKIni[$code][1];
/*if (!is_null($accesskey)) {
$name = $accesskey . '.' . $name;
}*/
if ($noLink) {
$linkHtml = hs($name);
} else {
$accesskeyAt = is_null($accesskey) ? '' : " {$_conf['accesskey_for_k']}=\"{$accesskey}\"";
$linkHtml = "<a href=\"" . hs($href) . '">' . hs($name) . "</a>";
}
// 特別 - #.ログ
if ($code == 'res_hist') {
$name = 'ログ';
if ($noLink) {
$logHt = hs($name);
} else {
$newtime = date('gis');
$logHt = P2View::tagA(UriUtil::buildQueryUri('read_res_hist.php', array('nt' => $newtime, UA::getQueryKey() => UA::getQueryValue())), hs($name), array($_conf['accesskey_for_k'] => '#'));
}
$linkHtml .= ' </li><li>' . $logHt;
}
return $linkHtml;
}
示例10: p2die
if ($i != 0) {
$files_st .= "と";
}
$files_st .= "「" . $afile . "」";
$i++;
}
p2die('ファイルの指定が正しくありません', hs(sprintf('%s 先生の読めるファイルは、%sだけ!', basename($_SERVER['SCRIPT_NAME']), $files_st)));
}
//=========================================================
// HTMLプリント
//=========================================================
// 読み込むファイルは拡張子.txtだけ
if (preg_match("/\\.txt\$/i", $file)) {
viewTxtFile($file, $encode);
} else {
p2die('cannot view - "' . hs($file) . '"');
}
//===================================================================
// 関数(このファイル内でのみ利用)
//===================================================================
/**
* ファイル内容を読み込んで表示する関数
*
* @return void
*/
function viewTxtFile($file, $encode)
{
global $_info_msg_ht;
if ($file == '') {
die('Error: file が指定されていません');
}
示例11: _getDatSokoATag
/**
* @return string <a>
*/
function _getDatSokoATag($aThreadList)
{
global $_conf;
$dat_soko_atag = '';
if (!$aThreadList->spmode or $aThreadList->spmode == 'taborn') {
$uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $aThreadList->host, 'bbs' => $aThreadList->bbs, 'norefresh' => '1', 'spmode' => 'soko', UA::getQueryKey() => UA::getQueryValue()));
$dat_soko_atag = P2View::tagA($uri, hs('dat倉庫'));
}
return $dat_soko_atag;
}
示例12: _getP2FrameHtml
/**
* @return string HTML
*/
function _getP2FrameHtml($motothre_url)
{
$atag = P2View::tagA(UriUtil::buildQueryUri('index.php', array('url' => $motothre_url, 'offline' => '1')), hs('3ペインで開く'), array('title' => 'p2フレーム 3ペインで開く'));
// Chrome, Safariで動作が変?なので、とりあえず条件から外しておく。
// もうちょっとまっとうなJavaScript処理に変えたいところ。
return $p2frame_ht = <<<EOP
<span class="open">
<script type="text/javascript">
<!--
if (top == self && !isChrome() && !isSafari()) {
//if (top == self) {
\tdocument.writeln('{$atag} | ');
}
//-->
</script>
</span>
EOP;
}
示例13: session_start
* Nickolay Shestakov <ns@ampex.ru>
*
* This program is free software, distributed under the terms of
* the GNU General Public License Version 2. See the LICENSE file
* at the top of the source tree.
*/
session_start();
if (!$_SESSION['fm_entry']) {
die('Not a Valid Entry');
}
include_once "../lang/" . $_SESSION['lang'] . ".lang.php";
include_once "../lib/func.php";
include_once "../lib/sysfunc.php";
$dir = stripslashes_r($_POST['dir']);
setenvlang();
$com = which("mkdir");
if ($com) {
exec($com . " -p " . escapeshellarg($dir) . " 2>&1", $out);
if (!empty($out)) {
echo $strMkDirFailed . ": " . hc($dir) . "<br>" . hs($out[0]);
} else {
echo "success";
}
exit;
}
if (@mkdir($dir)) {
echo "success";
} else {
echo $strMkDirFailed . ": " . hc($dir);
}
exit;
示例14: _printEditFileHtml
/**
* ファイル内容を読み込んで編集のためのHTMLを表示する
*
* @return void
*/
function _printEditFileHtml($path, $encode)
{
global $_conf, $modori_url, $rows, $cols;
$info_msg_ht = P2Util::getInfoHtml();
if ($path == '') {
die('Error: path が指定されていません');
}
$filename = basename($path);
$ptitle = "Edit: " . $filename;
if (false === FileCtl::make_datafile($path)) {
die(sprintf("Error: cannot make file. ( %s )", hs($path)));
}
$cont = file_get_contents($path);
if ($encode == 'EUC-JP') {
$cont = mb_convert_encoding($cont, 'SJIS-win', 'eucJP-win');
}
$cont_area_ht = htmlspecialchars($cont, ENT_QUOTES);
$modori_url_ht = '';
if ($modori_url) {
$modori_url_ht = sprintf('<p><a href="%s">Back</a></p>', hs($modori_url));
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<title><?php
eh($ptitle);
?>
</title>
</head>
<body onLoad="top.document.title=self.document.title;">
<?php
echo $modori_url_ht;
?>
Edit: <?php
eh($path);
?>
<form action="<?php
eh($_SERVER['SCRIPT_NAME']);
?>
" method="post" accept-charset="<?php
eh($_conf['accept_charset']);
?>
">
<input type="hidden" name="detect_hint" value="◎◇">
<input type="hidden" name="path" value="<?php
eh($path);
?>
">
<input type="hidden" name="modori_url" value="<?php
eh($modori_url);
?>
">
<input type="hidden" name="encode" value="<?php
eh($encode);
?>
">
<input type="hidden" name="rows" value="<?php
eh($rows);
?>
">
<input type="hidden" name="cols" value="<?php
eh($cols);
?>
">
<input type="submit" name="submit" value="Save"> <?php
echo $info_msg_ht;
?>
<br>
<textarea style="font-size:9pt;" id="filecont" name="filecont" rows="<?php
eh($rows);
?>
" cols="<?php
eh($cols);
?>
" wrap="off"><?php
eh($cont);
?>
</textarea>
</form>
</body></html>
<?php
}
示例15: printFavItaHtml
/**
* お気に板をHTML表示する
*
* @access public
* @return void
*/
function printFavItaHtml()
{
global $_conf, $matome_i, $STYLE;
// favita読み込み
$favitas = array();
if (file_exists($_conf['favita_path'])) {
if ($lines = file($_conf['favita_path'])) {
foreach ($lines as $l) {
if (preg_match("/^\t?(.+)\t(.+)\t(.+)\$/", trim($l), $matches)) {
$favitas[] = array('host' => $matches[1], 'bbs' => $matches[2], 'itaj' => $matches[3]);
}
}
}
}
// 空っぽなら
if (!$favitas) {
echo <<<EOP
<div class="menu_cate"><b>お気に板</b> [<a href="editfavita.php" target="subject">編集</a>]<br>
<div class="itas" id="c_favita">(空っぽ)</div>
</div>
EOP;
return;
}
// 新着数を表示する場合・まとめてプリフェッチ
if ($_conf['enable_menu_new'] && !empty($_GET['shownew'])) {
if ($_conf['expack.use_pecl_http'] == 1) {
require_once P2_LIB_DIR . '/P2HttpExt.php';
P2HttpRequestPool::fetchSubjectTxt($favitas);
$GLOBALS['expack.subject.multi-threaded-download.done'] = true;
}
}
$csrfid = P2Util::getCsrfId();
echo <<<EOP
<div class="menu_cate"><b><a class="menu_cate" href="javascript:void(0);" onClick="showHide('c_favita', 'itas_hide');" target="_self">お気に板</a></b> [<a href="editfavita.php" target="subject">編集</a>]<br>
<div class="itas" id="c_favita">
EOP;
foreach ($favitas as $favita) {
extract($favita);
// $host, $bbs, $itaj
$itaj_en = base64_encode($itaj);
$uri = UriUtil::buildQueryUri($_SERVER['SCRIPT_NAME'], array('host' => $host, 'bbs' => $bbs, 'setfavita' => '0', 'csrfid' => $csrfid));
$star_atag = P2View::tagA($uri, '★', array('target' => '_self', 'class' => 'fav', 'title' => "「{$itaj}」をお気に板から外す", 'onClick' => "return confirmSetFavIta('" . str_replace(array("\\", "'"), array("\\\\", "\\'"), $itaj) . "');"));
// 新着数を表示する場合
if ($_conf['enable_menu_new'] && !empty($_GET['shownew'])) {
$matome_i++;
// $host, $bbs
$spmode = '';
$shinchaku_num = 0;
$_newthre_num = 0;
include './subject_new.php';
// $shinchaku_num, $_newthre_num がセットされる
$newthre_ht = '';
if ($_newthre_num) {
$newthre_ht = "{$_newthre_num}";
}
$subject_uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en));
$subject_atag = P2View::tagA($subject_uri, hs($itaj), array('onClick' => "chMenuColor('{$matome_i}');"));
$read_new_uri = UriUtil::buildQueryUri($_conf['read_new_php'], array('host' => $host, 'bbs' => $bbs));
$read_new_attr = array('target' => 'read', 'id' => "un{$matome_i}", 'onClick' => "chUnColor('{$matome_i}');");
if ($shinchaku_num > 0) {
$read_new_attr['class'] = 'newres_num';
} else {
$read_new_attr['class'] = 'newres_num_zero';
}
$read_new_atag = P2View::tagA($read_new_uri, hs($shinchaku_num), $read_new_attr);
echo <<<EOP
{$star_atag} {$subject_atag} <span id="newthre{$matome_i}" class="newthre_num">{$newthre_ht}</span> ({$read_new_atag})<br>
EOP;
// 新着数を表示しない場合
} else {
$subject_uri = UriUtil::buildQueryUri($_conf['subject_php'], array('host' => $host, 'bbs' => $bbs, 'itaj_en' => $itaj_en));
$subject_atag = P2View::tagA($subject_uri, hs($itaj));
echo "{$star_atag} {$subject_atag}<br>";
}
ob_flush();
flush();
}
// foreach
echo " </div>\n";
echo "</div>\n";
}