Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1822076
StringUtil.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
2 KB
Subscribers
None
StringUtil.php
View Options
<?php
namespace
Sabre\DAV
;
/**
* String utility
*
* This class is mainly used to implement the 'text-match' filter, used by both
* the CalDAV calendar-query REPORT, and CardDAV addressbook-query REPORT.
* Because they both need it, it was decided to put it in Sabre\DAV instead.
*
* @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class
StringUtil
{
/**
* Checks if a needle occurs in a haystack ;)
*
* @param string $haystack
* @param string $needle
* @param string $collation
* @param string $matchType
* @return bool
*/
static
function
textMatch
(
$haystack
,
$needle
,
$collation
,
$matchType
=
'contains'
)
{
switch
(
$collation
)
{
case
'i;ascii-casemap'
:
// default strtolower takes locale into consideration
// we don't want this.
$haystack
=
str_replace
(
range
(
'a'
,
'z'
),
range
(
'A'
,
'Z'
),
$haystack
);
$needle
=
str_replace
(
range
(
'a'
,
'z'
),
range
(
'A'
,
'Z'
),
$needle
);
break
;
case
'i;octet'
:
// Do nothing
break
;
case
'i;unicode-casemap'
:
$haystack
=
mb_strtoupper
(
$haystack
,
'UTF-8'
);
$needle
=
mb_strtoupper
(
$needle
,
'UTF-8'
);
break
;
default
:
throw
new
Exception\BadRequest
(
'Collation type: '
.
$collation
.
' is not supported'
);
}
switch
(
$matchType
)
{
case
'contains'
:
return
strpos
(
$haystack
,
$needle
)
!==
false
;
case
'equals'
:
return
$haystack
===
$needle
;
case
'starts-with'
:
return
strpos
(
$haystack
,
$needle
)
===
0
;
case
'ends-with'
:
return
strrpos
(
$haystack
,
$needle
)
===
strlen
(
$haystack
)
-
strlen
(
$needle
);
default
:
throw
new
Exception\BadRequest
(
'Match-type: '
.
$matchType
.
' is not supported'
);
}
}
/**
* This method takes an input string, checks if it's not valid UTF-8 and
* attempts to convert it to UTF-8 if it's not.
*
* Note that currently this can only convert ISO-8559-1 to UTF-8 (latin-1),
* anything else will likely fail.
*
* @param string $input
* @return string
*/
static
function
ensureUTF8
(
$input
)
{
$encoding
=
mb_detect_encoding
(
$input
,
[
'UTF-8'
,
'ISO-8859-1'
],
true
);
if
(
$encoding
===
'ISO-8859-1'
)
{
return
utf8_encode
(
$input
);
}
else
{
return
$input
;
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Dec 24, 1:40 PM (13 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
914927
Default Alt Text
StringUtil.php (2 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment