2014-10-13 4 views
0

Я использую иностранных акцентированные символы с url_title() в CodeigniterИностранные Символов в url_title() в Codeigniter

function url_title ($str,$separator='-',$lowercase=FALSE) { 
    if ($separator=='dash') $separator = '-'; 
    else if ($separator=='underscore') $separator = '_'; 
    $q_separator = preg_quote($separator); 
    $trans = array(
    '\.'=>$separator, 
    '\_'=>$separator, 
    '&.+?;'=>'', 
    '[^a-z0-9 _-]'=>'', 
    '\s+'=>$separator, 
    '('.$q_separator.')+'=>$separator 
); 
    $str = strip_tags($str); 
    foreach ($trans as $key => $val) $str = preg_replace("#".$key."#i", $val, $str); 
    if ($lowercase === TRUE) $str = strtolower($str); 
    return trim($str, $separator); 
} 

И я вызываю функцию как url_title(convert_accented_characters($str),TRUE);.

$str заселяется как:

$posted_file_full_name = $_FILES['userfile']['name']; 
$uploaded_file->filename = pathinfo($posted_file_full_name, PATHINFO_FILENAME); 
$uploaded_file->extension = pathinfo($posted_file_full_name, PATHINFO_EXTENSION); 

Он работает хорошо КРОМЕ строка не начать с иностранным характером, как Ç, Ş, Ğ. Если этот символ находится в середине строки, он изящно преобразует. Но если он начинается с них, он просто удаляет символы вместо замены с помощью mached.

Спасибо за любую помощь.

+0

Попробуйте добавить модификатор 'u' в ваше регулярное выражение. ([Модификаторы шаблонов ¶] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php)) –

ответ

0

После утомительного поиска выясняется, что функция url_title() не является основной причиной. На самом деле, это не CI, которая удаляет начальные иностранные символы:

pathinfo($posted_file_full_name, PATHINFO_FILENAME);

Эта часть удаляет начальные символы. Я обновил свой код как:

$uploaded_file->filename = str_replace('.'.$uploaded_file->extension,'',$posted_file_full_name); 

и теперь он работает должным образом. Надеюсь, это поможет другим, кто застрял в такой фазе.

+1

Если это может помочь из [документации PHP] (http://php.net /manual/en/function.pathinfo.php#refsect1-function.pathinfo-notes): «pathinfo() является локальным, поэтому для правильного анализа пути, содержащего многобайтовые символы, соответствующий языковой стандарт должен быть установлен с помощью setlocale (). –