function qtranxf_slug_sanitize($s, &$is_permastruct) { $is_permastruct = qtranxf_slug_is_permastruct($s); $s = str_replace('#', '', $s); if ($is_permastruct) { if ($s[0] != '/') { $s = '/' . $s; } $s = preg_replace('#/{2,}#', '/', $s); } return remove_accents($s); }
/** * @param (string) $slug - urldecoded post name or other slug. */ function qtranxf_slug_multilingual_base($slug) { global $q_config; $is_permastruct = qtranxf_slug_is_permastruct($slug); if ($is_permastruct) { $info = qtranxf_slug_split_permastruct($slug); $val = ''; foreach ($info['blocks'] as $b) { if (qtranxf_slug_is_substitution($b)) { $val .= $b; } else { $val .= qtranxf_slug_multilingual($b); } } return $val; } else { return qtranxf_slug_multilingual($slug); } }
function qtranxf_slug_split_permastruct($s) { $blocks = preg_split('#([^a-z0-9_\\-%]+|(?:%[^%/]+%)+)#', $s, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $info = array('blocks' => $blocks, 'slugs' => array()); $slugs =& $info['slugs']; if (count($blocks) == 1) { $slugs[] = $blocks[0]; } else { foreach ($blocks as $k => $v) { if (qtranxf_slug_is_permastruct($v)) { continue; } $blocks[$k] = $v = sanitize_key($v); $slugs[] = $v; } } return $info; }