所以我有一个像这样的HTML字符串:
<td class="name">
<a href="/blah/somename23123">Some Name</a>
</td>
<td class="name">
<a href="/blah/somename28787">Some Name2</a>
</td>
Run Code Online (Sandbox Code Playgroud)
使用XPath我可以使用此Xpath查询获取href属性的值:
$domXpath = new \DOMXPath($this->domPage);
$hrefs = $domXpath->query("//td[@class='name']/a/@href");
foreach($hrefs as $href) {...}
Run Code Online (Sandbox Code Playgroud)
而获取文本值更容易,如下所示:
// Xpath auto. strips any html tags so we are
// left with clean text value of a element
$domXpath = new \DOMXPath($this->domPage);
$names = $domXpath->query("//td[@class='name']/");
foreach($names as $name) {...}
Run Code Online (Sandbox Code Playgroud)
现在我很想知道,我怎样才能将这两个查询结合起来,只用一个查询来获取两个值(如果它是类似的甚至是可行的?).
正如我在标题中提到的,当使用css font-family,自定义字体(font-face)时,它会混淆(黑色背景,黑色文本(我猜))Opera中的自动完成下拉列表.
input[type='text'], input[type='password'], input[type='email'], input[placeholder] {
font-size: 1.2em;
font-family: sans-serif;
color: #2A873A;
padding-left: 25px;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但如果我替换"font-family:sans-serif;" 使用一些font-face字体(谷歌网络字体),然后问题开始.
这是"bug"的截图.

PS我应该提一下,这是Opera的原生自动完成,而不是自定义js,下拉列表.
如果我在没有queryBuilder的情况下使用这个dql进行查询
$query = $this->_em
->createQuery("SELECT p, g, c
FROM LikeYeah\GoBundle\Entity\Product p
JOIN p.garments g
LEFT JOIN g.colours c
ORDER BY p.id DESC
");
Run Code Online (Sandbox Code Playgroud)
一切都很好,但如果我使用(我相信是相同的)查询槽查询生成器这样
$qb->select('p, g, c')
->from('LikeYeah\GoBundle\Entity\Product', 'p')
->join('p.garments', 'g')
->leftJoin('g.colours', 'c')
->orderBy('p.id', 'desc');
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
"语义错误"第0行,第66行靠近'.colours c,LikeYeah\GoBundle\Entity\Product':错误:识别变量g用于连接路径表达式,但之前没有定义过."
我错过了什么?
我对您对此安全问题的建议/意见感兴趣.
我在考虑做这样的事情:
你怎么看.这个可以吗?我还可以使用$ _SERVER ['HTTP_USER_AGENT']检查实现什么,以确保cookie没有被盗(IP地址除外)?
PS从敏感数据cookie只包含userId.
编辑: 好的,清除一些事情.我正在尝试制作不依赖于会话的"安全"auth系统.有问题的应用程序或多或少构建为纯粹的restful api.
第2步:
问题: "Fu的协议没有提供这个问题的答案.Fu的协议中只有一个密钥,即服务器密钥.一个简单的解决方案是使用此服务器密钥加密每个cookie的数据字段;但是,这种解决方案并不安全."
解决方案: "我们对此问题的解决方案简单而有效.我们建议使用HMAC(用户名|到期时间,sk)作为加密密钥.此解决方案具有以下三个良好属性:首先,加密密钥是唯一的因为用户名和到期时间,每个不同的cookie.请注意,每当创建一个新的cookie时,cookie中都会包含一个新的过期时间.其次,加密密钥是不可伪造的,因为服务器密钥是保密的.第三,每个cookie的加密密钥不需要服务器端或cookie内的任何存储,而是由服务器动态计算."来自纸张"安全Cookie协议"由Alex X. Liu,Jason M科瓦奇
第4步: 加密数据(看起来像这样:'marko@example.com|34234324234|324erfkh42fx34gc4fgcc423g4'),这样即使客户也无法准确知道内部的内容.
第5步: Base64编码只是为了使最终值漂亮.
我试图从gedmo 嵌套集扩展博客复制示例,其中有许多父节点.在那里,你可以创建许多可移动的父节点以及儿童(这是典型的一组嵌套的维基百科).
阅读评论部分,常见的建议是删除@Gedmo\TreeRoot annotation/mapping,但如果我这样做,我就能够移动根节点,但树会被打破特别是左右id.如果我保留TreeRoot,并尝试移动根节点,我会得到"没有节点兄弟"或类似的东西,如预期的那样.
查看扩展程序博客上的实例,您可以看到您可以创建没有父级的类别并向上或向下移动它.
我的类别实体 - 相关部分:
class Category
{
/**
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer")
*/
private $lft;
/**
* @Gedmo\TreeLevel
* @ORM\Column(name="lvl", type="integer")
*/
private $lvl;
/**
* @Gedmo\TreeRight
* @ORM\Column(name="rgt", type="integer")
*/
private $rgt;
/**
* @Gedmo\TreeRoot
* @ORM\Column(name="root", type="integer", nullable=true)
*/
private $root;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
* @Exclude
*/ …Run Code Online (Sandbox Code Playgroud) 我有通过 exoplayer 播放几个音频文件的基本代码
ExtractorMediaSource audioSource = new ExtractorMediaSource(uri, dataSourceFactory, extractor, null, null);
ExtractorMediaSource audioSource2 = new ExtractorMediaSource(uri2, dataSourceFactory2, extractor, null, null);
ConcatenatingMediaSource concatenatedSource =
new ConcatenatingMediaSource(audioSource, audioSource2);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用https://github.com/google/ExoPlayer/issues/2122中的代码示例获取所有媒体源的持续时间
Timeline timeline = mMediaPlayer.getCurrentTimeline();
int currentWindowIndex = mMediaPlayer.getCurrentWindowIndex();
long currentPosition = mMediaPlayer.getCurrentPosition();
long totalTime = 0;
Timeline.Window tmpWindow = new Timeline.Window();
if (timeline != null) {
for (int i = 0; i < timeline.getWindowCount(); i++) {
long windowDuration = timeline.getWindow(i,tmpWindow).getDurationMs();
totalTime += windowDuration;
if (i < currentWindowIndex) {
currentPosition += windowDuration; …Run Code Online (Sandbox Code Playgroud) 我的 Xamarin.UITest 有问题,特别是屏幕截图功能。它没有按预期工作。
我试图将“创建的”屏幕截图复制到另一个目录,但出现以下错误:
消息:System.IO.FileNotFoundException:找不到文件“C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\screenshot-1.png”。
我正在使用这段代码来复制图像文件:
var screen = app.Screenshot("Welcome screen.");
screen.CopyTo(@"C:\Users\someuser\Desktop\screenshotTest.png");
Run Code Online (Sandbox Code Playgroud)
如何指定屏幕截图的第一个路径/位置,因为原始路径可能需要管理员权限,而我没有。
我正在尝试将此(我的)SQL转换为DQL
SELECT content, created, AVG(rating)
FROM point
GROUP BY DAY(created)
ORDER BY created ASC
Run Code Online (Sandbox Code Playgroud)
我被困在GROUP BY部分,显然DAY/WEEK/MONTH不被认为是有效的"功能".
[语义错误]第0行,第80行附近'(p.created)ORDER':错误:无法按未定义的标识变量进行分组.
$this->createQueryBuilder('p')
->select('p')
->groupBy('DAY(p.created)')
->orderBy('p.created', 'ASC')
Run Code Online (Sandbox Code Playgroud)
问:是否可以使用查询构建器创建此类查询,还是应该使用本机查询?