Существует несколько способов объединить две строки вместе.
Использовать оператор конкатенации .
(и .=
)
В PHP .
- оператор конкатенации, который возвращает конкатенацию его правого и левого аргументов
$data1 = "the color is";
$data2 = "red";
$result = $data1 . ' ' . $data2;
Если вы хотите добавить строку в другую строку, вы должны использовать оператор .=
:
$data1 = "the color is ";
$data1 .= "red"
Complex ( curly) синтаксис / двойные кавычки
В PHP-переменные, содержащиеся в двойных кавычках, интерполируются (т.е. их значения «выгружаются» для переменной). Это означает, что вы можете поместить переменные вместо строк и просто поместить пространство между ними. Кубические фигурные скобки дают понять, где находятся переменные.
$result = "{$data1} {$data2}";
Примечание: это также будет работать без фигурных скобок в вашем случае:
$result = "$data1 $data2";
Используйте sprintf()
или printf()
sprintf()
позволяет форматировать строки с использованием мощных параметров форматирования. Это слишком сложно для такой простой конкатенации, но это удобно, когда у вас сложная строка и / или вы хотите сделать некоторое форматирование данных.
$result = sprintf("%s %s", $data1, $data2);
printf()
делает то же самое, но сразу же Отобразить вывод.
printf("%s %s", $data1, $data2);
// same as
$result = sprintf("%s %s", $data1, $data2);
echo $result;
Heredoc
Heredocs также может использоваться для объединения переменных в строку.
$result= <<
Используйте ,
с echo()
Это работает только при повторном выпуске содержимого и не присваивании переменной. Но вы можете использовать запятую, чтобы отделить список выражений для PHP для эха и использовать строку с одним пробелом в качестве одного из этих выражений:
echo $data1, ' ', $data2;
В целом история защищена браузером от доступа к javascript, кроме как с помощью функции «назад» и «вперед». Есть некоторые хаки , которые могут просматривать некоторый объем истории, но они просто такие - хаки.
Если вы хотите программно просмотреть / изменить историю, вы можете сделать это через плагинов браузера. Например, Chrome-плагины могут использовать этот API
EDIT
Mozilla также имеет некоторую информацию об изменении истории, доступную Javascript здесь .
Это также похоже на , этот вопрос говорит о некоторых из тех вещей, которые вам нужны.
Short Answer no, вы не можете получить доступ к истории своего браузера через общий Javascript.
Вы могли бы создать расширение, которое было бы перекрестным браузером с чем-то вроде: http://crossrider.com /
Документы для доступа к хранилищу Places
, которые позволяют вам получить доступ к истории браузера, приведены здесь для firefox: https://developer.mozilla.org/ ru-US / docs / Using_the_Places_history_service
И для хром это здесь: http://developer.chrome.com/extensions/history.html
Файл Places
, названный Places.sqlite
, является базой данных sqlite, если вы создадите локальное приложение, которое читает из этого файла, вместо доступа к нему из вашего браузера, это будет проще, на мой взгляд.
Вы также можете использовать менеджер https://addons.mozilla.org/en-us/firefox/addon/sqlite-manager/ sqlite и заказать историю в соответствии с датами непосредственно из базы данных. Вот ERD для этого http://people.mozilla.org/~dietrich/places-erd.png
Схема URI place:
предоставляет модификацию потенциала для решения javascript
«only» (mousing around required), приведенного ниже.
Сначала обратите внимание на различие между историей сеанса, к которой можно получить доступ через History
и window.history
и общую историю браузера (в FF это называется частью библиотеки, а другая часть библиотеки - закладками), которая не имеет прямого интерфейса javascript
доступа. ref:
developer.mozilla.org/en-US/docs/Web/API/Window.history
проверено с помощью:
window.navigator.userAgent= Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 (Splashtop-v1.2.17.0)
(Интимное знакомство с этим предметом, к сожалению, связано с сильно искалеченным FF, выпущенным как QuickWeb по VM устройства в системе Splashtop.)
Вот что можно сделать: Примечание:
Используя конструкцию javascript для URI схемы place:
с соответствующим .some_get_list_function
и закладок.
<a href="place:queryType=0&sort=8&maxResults=10" title="hysterix">extract history</a>
Щелкнув ссылку, щелкните правой кнопкой мыши по закладке, а затем щелкнув закладку " преуспевает». Ergo, также может разрешить левый щелчок, чтобы сразу перенаправить на закладку.
<a href="place:queryType=0&sort=8&maxResults=10" rel="sidebar" title="hystryx">extract history</a>
Перетащите теперь отмеченный place:
URI «hystryx
» в цель <form><textarea>
. Обратите внимание, что значительное ограничение заключается в том, что этот процесс извлекает ТОЛЬКО URI истории и ни одну хронологию истории, титры и т. Д. Можно восстановить часть этой информации (например, заголовки, открыв каждый URI, чтобы извлечь их, делая это, конечно, изменения URI «самая последняя дата доступа» в истории), чтобы сделать URI «хорошими» ссылками.
Объединяя все это:
data:text/html;charset=utf-8,
<html><title >Heuristic History Hysterics scURIple</title>
<!--
http://stackoverflow.com/questions/13369829/access-my-entire-browsing-history-via-javascript
/22773361# 22773361 -->
<!--
- scURIples (scriples) are generic schema (data:, javascript:, place:, ... ) URI that embed script
- data: scURIples (scriples) are amenable to direct cut & paste URI address bar evaluation
- generally no particular distinction is made between scURIples of different schema,
such as this data: schema URI, but ...
- javascript: schema specific scURIples are called scriplets or bookmarklets -->
<!--
a bookmark of this data: scURIple or its internal javascript: scriplet does the same thing -->
<!--
a place[s]: schema URI "works" from a bookmark only and not the address bar or a hyperlink -->
<!-- for internal use only (by the scURIbbler used to edit this script):
javascript: with ( opener . document . forms[0] . JS ) value =
value . replace( /\t|\n/g, function(c){ return escape(c) + c } ) ; close();//
scURIples are unscURIpulous
NB. no raw tabs, % 09 's collapse to null, quote raw %'s w/ non-numerics, };'s , ... -->
<script>
javascript:
String.prototype.HTMLtagWrap =
function ( tag, attrs) {
return tag[0]=="/" ?
"<" +tag+ ">" +this+ "<" +tag.substr(1)+ (attrs?" "+attrs:"") + ">" :
"<" +tag+ (attrs?" "+attrs:"") + ">" +this+ "</" +tag+ ">"
} ;
String.prototype.HTMLwrapTags =
function ( tagRA, atRA) {
return tagRA[0] ? this . HTMLtagWrap( tagRA.pop(), atRA.pop()) . HTMLwrapTags( tagRA, atRA)
: this
} ;
/* alert */ ( str =
( function(x){return x.HTMLtagWrap('title') + x.HTMLwrapTags(['/pre','center','b'] , [ ] ) }
('Heuristic History Hysterics')+
'1. '.HTMLtagWrap('b') +
'<input id=URIplcQry type=text size=120 ' +
'value="place:queryType=0&sort=8&maxResults=25" >\n' +
'suggestions:\t try just a raw place: with no corpus or places: (undocumented with an s)\n' +
'auto attribution:\t' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=sort=4 > \t' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=type=5 > \t' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=queryType=1 >\t ' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=domain="" >\t ' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=includeHidden=true >\t ' +
'<input type=button onclick=URIplcQry.value+="&"+this.value value=onlyBookmarked=true >\t' +
'\n\n2. '.HTMLtagWrap('b') +
'This link bookmarks the place: URI from step 1: ' +
'place: query URI href results' .
HTMLtagWrap( 'A',
' href="places:" rel="sidebar" title="hystryx " id="hystryx " ' +
' onmouseover ="with(this)title=id+(href=document.forms[0].URIplcQry.value)" '
) +
'\t(hint: to see the actual link, mouse over it 2x)' +
'\n\n3. '.HTMLtagWrap('b', ' style="vertical-align:top;" ' ) +
( '\n\t\t\tINSTRUCTIONS\n\n' +
'1. make the href place: query for the link in step 2. \n' +
'2. click the link to create a bookmark that accesses the URI library\n' +
'3. drag & drop the new bookmark (aka a container) here (replace this content)\n' +
'4. cleanup and delete the new bookmark if desired\n' +
'5. to be done: add a scURIbbler to massage this textarea\n' +
'\n\n' +
'tested with userAgent:\t\t\t\t' +
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4' +
'(Splashtop-v1.2.17.0) \n' +
'\twindow.navigator.userAgent =\t\t' + window.navigator.userAgent +
'\n '
) .HTMLtagWrap('textarea', 'id=histURIs rows=12 cols=120 nowrap') +
'\n\n4. ...'.HTMLtagWrap('b') +
'\n\n5. '.HTMLtagWrap('b') +
'scURIbbler: <input type=text size=120 id=histURIpg ' +
' value="javascript:with(opener)with(document.forms[0]) ' +
' ( URIplcQry.value.HTMLtagWrap(\'b\') + ' +
' histURIs.value.replace(/^.*$/g,function(m){return m.link(m)}) ' +
' ).HTMLwrapTags( \'html pre\'.split(/ +/) , [ ] ) ' +
' "><input type=button value="open histURIs" onclick=window.open(histURIpg.value )> ' +
' '
) . HTMLwrapTags ( ["html", "form", "pre"] , [ ] )
);
/*
window.open ( "data:text/html;charset=utf-8," + str . replace ( /\n/g, '%'+'0A ' ) );
*/
document.write ( str );
</script>
</html>
Javascript предлагает только базовые вызовы, когда ваша страница управляет браузером, например:
history.length
window.history.back()
history.forward()
window.history.go(-3)
Но если вы должны написать свой собственный браузер, тогда вы будете использовать 3GL, d полностью контролировать то, что пользователь набрал в полях поиска или адреса, которые вы указали, поэтому у вас не должно быть проблем с записью того, что сделал пользователь, если вы знаете, что делаете.
history.length
работал просто отлично!
– falsarella
1 October 2015 в 14:14