xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/Support/XPathEscaper.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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