Files
Phraseanet/lib/Alchemy/Phrasea/SearchEngine/Elastic/StringUtils.php
Jean-Yves Gaulier da532cc36a PHRAS-2748_bad-chars-cterms_4.1
fix : remove bad ascii chars (0...31 except tab; cr; lf) from cterms values
todo ? : also cleanup bad chars from prod/editing and api/editing ?
2019-11-05 17:59:03 +01:00

89 lines
1.9 KiB
PHP

<?php
/**
* This file is part of Phraseanet
*
* (c) 2005-2016 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\SearchEngine\Elastic;
use Cocur\Slugify\Slugify;
use Cocur\Slugify\SlugifyInterface;
use Transliterator;
class StringUtils
{
/**
* @var SlugifyInterface|null
*/
private static $slugifier;
private static $transliterator;
/**
* Prevent instantiation of the class
*/
private function __construct()
{
}
public static function setSlugify(SlugifyInterface $slugify = null)
{
self::$slugifier = $slugify;
}
/**
* @return SlugifyInterface
*/
private static function getSlugifier()
{
if (null === self::$slugifier) {
self::$slugifier = new Slugify();
}
return self::$slugifier;
}
public static function slugify($string, $separator = '-')
{
return self::getSlugifier()->slugify($string, $separator);
}
public static function asciiLowerFold($string)
{
// '北京' -> 'bei jing'
if (!self::$transliterator) {
$id = 'Any-Latin; Latin-ASCII; Any-Lower';
self::$transliterator = Transliterator::create($id);
}
return self::$transliterator->transliterate($string);
}
/**
* replace bad chars (ascii 0...31 except 9,10,13)
*
* @param $s
* @param string $replace
* @return mixed
*/
public static function substituteCtrlCharacters($s, $replace = '_')
{
static $bad_chars = null;
if($bad_chars === null) {
$bad_chars = [];
for($i=0; $i<32; $i++) {
if($i != 9 && $i != 10 && $i != 13) {
$bad_chars[] = chr($i);
}
}
}
return str_replace($bad_chars, $replace, $s);
}
}