1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace Facebook\WebDriver\Support; 4*04fd306cSNickeau 5*04fd306cSNickeauclass XPathEscaper 6*04fd306cSNickeau{ 7*04fd306cSNickeau /** 8*04fd306cSNickeau * Converts xpath strings with both quotes and ticks into: 9*04fd306cSNickeau * `foo'"bar` -> `concat('foo', "'" ,'"bar')` 10*04fd306cSNickeau * 11*04fd306cSNickeau * @param string $xpathToEscape The xpath to be converted. 12*04fd306cSNickeau * @return string The escaped string. 13*04fd306cSNickeau */ 14*04fd306cSNickeau public static function escapeQuotes($xpathToEscape) 15*04fd306cSNickeau { 16*04fd306cSNickeau // Single quotes not present => we can quote in them 17*04fd306cSNickeau if (mb_strpos($xpathToEscape, "'") === false) { 18*04fd306cSNickeau return sprintf("'%s'", $xpathToEscape); 19*04fd306cSNickeau } 20*04fd306cSNickeau 21*04fd306cSNickeau // Double quotes not present => we can quote in them 22*04fd306cSNickeau if (mb_strpos($xpathToEscape, '"') === false) { 23*04fd306cSNickeau return sprintf('"%s"', $xpathToEscape); 24*04fd306cSNickeau } 25*04fd306cSNickeau 26*04fd306cSNickeau // Both single and double quotes are present 27*04fd306cSNickeau return sprintf( 28*04fd306cSNickeau "concat('%s')", 29*04fd306cSNickeau str_replace("'", "', \"'\" ,'", $xpathToEscape) 30*04fd306cSNickeau ); 31*04fd306cSNickeau } 32*04fd306cSNickeau} 33