示例#1
0
 /**
  * Adds UUID data attributes to all elements in the document, skipping cdata blocks.
  * @param $html html source
  * @return string
  */
 public function applyElementUuids($html)
 {
     //remove CDATA blocks from source and replace with tokens
     $cdata = array();
     $html = preg_replace_callback('/<!\\[CDATA\\[((?:[^]]|\\](?!\\]>))*)\\]\\]>/', function ($matches) use(&$cdata) {
         $index = count($cdata);
         $replacement = "{{{CDATA-{$index}" . "}}}";
         $cdata[$index] = $matches[0];
         return $replacement;
     }, $html);
     //Add uuid attribute to all tags
     $content = preg_replace_callback("/(<([\\w]+)[^>]*>)/", function ($matches) {
         if (strpos($matches[0], 'data-chaucer-element-id') === false) {
             $id = Uuid::v4();
             $search = '<' . $matches[2];
             $replace = '<' . $matches[2] . ' data-chaucer-element-id="' . $id . '"';
             return str_replace($search, $replace, $matches[0]);
         }
         return $matches[0];
     }, $html);
     //Put CDATA blocks back into source
     if (count($cdata) > 0) {
         for ($x = 0; $x < count($cdata); $x++) {
             $search = "{{{CDATA-{$x}" . "}}}";
             $content = str_replace($search, $cdata[$x], $content);
         }
     }
     return $content;
 }
示例#2
0
 /**
  * @brief Generates a Universally Unique IDentifier, version 1, 3, 4 or 5.
  *
  * This function generates a truly random UUID. The built in CakePHP String::uuid() function
  * is not cryptographically secure. You should uses this function instead.
  *
  * @see http://tools.ietf.org/html/rfc4122#section-4.4
  * @see http://en.wikipedia.org/wiki/UUID
  * @return string A UUID, made up of 32 hex digits and 4 hyphens.
  */
 function generate($version = null, $ns = null, $name = null)
 {
     if ($version == null) {
         $version = $this->version;
     }
     switch ($version) {
         case Uuid::UUID_V1:
             return Uuid::v1();
         case Uuid::UUID_V3:
             return Uuid::v3($ns, $name);
         case Uuid::UUID_V4:
             return Uuid::v4();
         case Uuid::UUID_V5:
             return Uuid::v5($ns, $name);
     }
 }