[Tiki-devel] Function for encoding anchor names
Volker Wysk <post-hhF2Jplw28UoZk/[email protected]>
| Newsgroups | gmane.comp.cms.tiki.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi! I've written a PHP function which does a standards-compliant encoding of an anchor name to a URL fragment string (the part of an URL after the "#"). Now this function needs to be used in Tiki. See attachment. Volker _______________________________________________ TikiWiki-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tikiwiki-devel
url.php
(application/x-php, 2.2 KB)
<?php
function url_fragment_string($txt)
{
$arr = mb_str_split($txt);
$frag = "";
for ($i = 0; $i < count($arr); $i++) {
$chr = $arr[$i];
$ord = IntlChar::ord($chr);
if ($chr == " ") {
// Encode spaces by hyphens.
$frag .= "-";
} else {
if ( // URL code points
(ctype_alnum($chr)
|| $chr == "!" || $chr == "$" || $chr == "&" || $chr == "'" || $chr == "(" || $chr == ")"
|| $chr == "*" || $chr == "+" || $chr == "," || $chr == "-" || $chr == "." || $chr == "/"
|| $chr == ":" || $chr == ";" || $chr == "=" || $chr == "?" || $chr == "@" || $chr == "_"
|| $chr == "~"
|| ($ord >= 0x00A0 && $ord <= 0x10FFFD))
// surrogates
&& !($ord >= 0xD800 && $ord <= 0xDFFF)
// noncharacters
&& !( ($ord >= 0xFDD0 && $ord <= 0xFDEF)
|| $ord == 0xFFFE || $ord == 0xFFFF || $ord == 0x1FFFE || $ord == 0x1FFFF
|| $ord == 0x2FFFE || $ord == 0x2FFFF || $ord == 0x3FFFE || $ord == 0x3FFFF
|| $ord == 0x4FFFE || $ord == 0x4FFFF || $ord == 0x5FFFE || $ord == 0x5FFFF
|| $ord == 0x6FFFE || $ord == 0x6FFFF || $ord == 0x7FFFE || $ord == 0x7FFFF
|| $ord == 0x8FFFE || $ord == 0x8FFFF || $ord == 0x9FFFE || $ord == 0x9FFFF
|| $ord == 0xAFFFE || $ord == 0xAFFFF || $ord == 0xBFFFE || $ord == 0xBFFFF
|| $ord == 0xCFFFE || $ord == 0xCFFFF || $ord == 0xDFFFE || $ord == 0xDFFFF
|| $ord == 0xEFFFE || $ord == 0xEFFFF || $ord == 0xFFFFE || $ord == 0xFFFFF
|| $ord == 0x10FFFE || $ord == 0x10FFFF)
)
{
$frag .= $chr;
} else {
// Unallowed characters - must be percent-encoded.
$bytes = str_split($chr);
for ($j = 0; $j < count($bytes); $j++) {
$frag .= "%" . bin2hex($bytes[$j]);
}
}
}
}
return $frag;
}
// Test: echo url_fragment_string("abc关一条!!äöü 龙服务 Tiki ist gut.");
signature.asc
(application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE6QXGh82Ov3+2nrxp+K4ydFOsHoUFAmP4R/YACgkQ+K4ydFOs HoU3TQ/+OeqXqr95r2gXobVCrpPdsDj+8/jnSlQLLrKxPVElrK770XS1V7qb2qRk LUPmTBjuCfcfgZRenirozoilT8E0BbRbd5X2O2T0qZeZbw7KMR8QtHVg+iEQ2j/k XqoQFpkDm+PkxxdI07TSNY8KrMw/N2BZjvvYJhNcUH5VqW7TuOO3iADS+si5Kltu 9a8HasThrnOUySd9wm6VMx/77RaodcIfeBSHG/ywMqormXSHp4/vGZhilB632k77 ll83hXMTFTI5C+Br9ED8ny14GGz/Sk/DApaBcOH4ZZFyMbC8vukrbw4n9eFLxPIB YuQ6YKRhtvyUPfcg8j9KVT5ngse71ZzgoiTPlav9lZPkUJEVeYrlkD3TANpoQCl+ OGOxNeZBoBSlJ8sZaWDj/wWVSuE8EJXvSORfhwZJJOS+2HF17A44RPDPSW96IyLw 9/hEvjSmvLeWry7wEnRGr3dymeX4vpPoPxz/n+VJ24DFIR92gRQc40qQWkhT/yqz jBbY1eTj2NiOvXmBoYR1VYpjmWNW4Vv9OWrqQUr1OWt4jYUgHw2WXg2AEj7JNhT4 UMFnvje28nThjyUWHju4IbJe3EljEK2EWvBQq35tdeRyX8aqGbOHCzrrwObLgvQG F6UeKeLb+KwFhP/Te0d1GFkOq155Gp4KF+l0vl9sDFk4vrOdoyg= =4MJ4 -----END PGP SIGNATURE-----