За последние 24 часа нас посетил 42571 программист и 1813 роботов. Сейчас ищут 1829 программистов ...

Что такое "\x03"?

Тема в разделе "PHP для новичков", создана пользователем php_user, 9 дек 2014.

  1. php_user

    php_user Новичок

    С нами с:
    19 апр 2014
    Сообщения:
    91
    Симпатии:
    0
    Есть кусок простого шаблонизатора. В нем не понятно что заменяется в первой строке- что такое "\x03"?
    Код (PHP):
    1. $tplPage = <<<TEXT
    2. <html>
    3. <head>
    4.     <title>{title}</title>
    5. </head>
    6. <body>
    7.     {menu|#tplMenu}
    8.     {content|#tplContent}
    9.     {footer|#tplFooter}
    10. </body>
    11. </html>
    12. TEXT;
    13. //--------------------------------------
    14. $template = strtr($template,array('{{'=>"\x03",'}}'=>"\x04"));
    15.     preg_match_all("/\{([^\}]+)\}/i",$template,$matches);
    16.     var_dump($matches);
    Также не понятно, почему var_dump в последней строке из примера выше выводит массив из двух частей (см.ниже), вместо просто измененного массива
    Код (PHP):
    1. array (size=2)
    2.   0 => 
    3.     array (size=4)
    4.       0 => string '{title}' (length=7)
    5.       1 => string '{menu|#tplMenu}' (length=15)
    6.       2 => string '{content|#tplContent}' (length=21)
    7.       3 => string '{footer|#tplFooter}' (length=19)
    8.   1 => 
    9.     array (size=4)
    10.       0 => string 'title' (length=5)
    11.       1 => string 'menu|#tplMenu' (length=13)
    12.       2 => string 'content|#tplContent' (length=19)
    13.       3 => string 'footer|#tplFooter' (length=17)
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    \x03 \x04 это шестнадцатеричные значения 0x03 и 0x04 (или 3 и 4 десятеричные). авторы шаблонизатора умело меняют открывающиеся и закрывающиеся теги на эти байты, которые в таблице ASCII значат ETX EOT
    то есть это просто временный маркер внутри шаблонизатора. к пользователю это не отправляется и нужно только в процессе разбора шаблона

    по второму вопросу - почитайте ман по любой реализации регулярных выражений. ВСЕГДА ЛЮБОЙ движок первым элементом записывает текст который привел к совпадению а потом уже N-элементов соответствия N-шаблонам в регулярке.
    сравните 00 и 10 - 0 => string '{title}' (length=7) 0 => string 'title' (length=5)