2016-10-27 44 views
0

我使用Symfony\Component\DomCrawler\Crawler包找到與包含多個CSS特殊字符的名稱的形式逃逸在symfony的CSS選擇特殊字符或使用通配符

<input name="myfield[0].thing"> 

我使用

$messageElement = $crawler->filter('input[name=myField[0].thing]'); 

return $messageElement->attr($attribute); 

但我得到錯誤

Symfony \ Component \ CssSelector \ Exception \ SyntaxErrorException:期望的「]」,但找到。

顯然這是因爲symfony css選擇器使用[ ]來包含屬性。所以如果我嘗試逃跑所有的特殊字符

$crawler->filter('input[name=myField\[0\]\.thing]'); 

我現在得到空輸出。我怎樣才能解決這個問題?

獎金問題:是否可以使用通配符代替? *似乎不適合我。

+0

是不是這一切發生,因爲你沒有關閉撇號? – malcolm

+0

不,它只是一個SO複製粘貼失敗。如果沒有撇號會有一個PHP編譯錯誤 – myol

回答

1

如果封裝字段名稱它應該工作,試試這個:

$messageElement = $crawler->filter('input[name="myField[0].thing"]'); 

return $messageElement->attr($attribute);. 

對於獎金問題,你可以使用這裏提出類似的正則表達式匹配:wildcard * in CSS for classes

// For matching strings starting with a certain thing notice the ^= 
$messageElement = $crawler->filter('input[name^="myField[0]"]'); 

// For matching strings containing with a certain thing notice the *= 
$messageElement = $crawler->filter('input[name*="myField[0]"]'); 
+0

不能相信我沒有想到用引號 - 完美謝謝 – myol