2014-11-29 2 views
0

Я нашел следующую функцию для создания ссылок на SEO из имен моих статей и категорий. Проблема, с которой я столкнулась, связана с испанскими версиями, поскольку они имеют буквы с акцентом.Замените акцентированные буквы как часть существующей функции SEO в PHP

Функция отлично работает с английским, но когда я переключаюсь на испанский, функция удаляет все буквы с акцентом из ссылок SEO. То, что я хочу сделать вместо этого, чтобы заменить их на их без акцента версии

GENERATE SEO URLS */  
    function generate_seo_link($input,$replace = '-',$remove_words = true,$words_array = array()) 
{ 
    //make it lowercase, remove punctuation, remove multiple/leading/ending spaces 
    $return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($input)))); 

    //remove words, if not helpful to seo 
    //i like my defaults list in remove_words(), so I wont pass that array 
    if($remove_words) { $return = remove_words($return,$replace,$words_array); } 

    //convert the spaces to whatever the user wants 
    //usually a dash or underscore.. 
    //...then return the value. 
    return str_replace(' ',$replace,$return); 
} 

/* takes an input, scrubs unnecessary words */ 
function remove_words($input,$replace,$words_array = array(),$unique_words = true) 
{ 
    //separate all words based on spaces 
    $input_array = explode(' ',$input); 

    //create the return array 
    $return = array(); 

    //loops through words, remove bad words, keep good ones 
    foreach($input_array as $word) 
    { 
     //if it's a word we should add... 
     if(!in_array($word,$words_array) && ($unique_words ? !in_array($word,$return) : true)) 
     { 
      $return[] = $word; 
     } 
    } 

    //return good words separated by dashes 
    return implode($replace,$return); 
} 

Затем я попытался создать отдельную функцию, чтобы заменить акцент письма, которые я планировал использовать вместе с указанной выше функции.

function convertAccented($str) 
{ $accented = array("á", "é", "ó", "ú", "ñ","í"); 
    $cleanlink = array("a", "e", "o", "u", "n","i"); 
    return str_replace($accented, $cleanlink, $str); 
} 

Однако, когда я пытаюсь объединить обе функции, акцентированные буквы, по-прежнему удаляются вместо заменить их без акцента коллег.

Я уже пытался convertAccented(generate_seo_link($categoryname)); и generate_seo_link(convertAccented($categoryname)); без успеха ...

Я также попытался заменить strtolower($input) на mb_strtolower($input, 'UTF-8') в первой функции, а не предложили в другом Q & А еще никакого успеха.

Мне нужна помощь в определении того, как включить изменение акцента на буквы без акцента из первой функции выше.

Например, категория "Tarjetas de Crédito" будет преобразована в "tarjetas-de-crdito" без последнего "e". Вместо «tarjetas-de-credito»

Я уже просмотрел сайт и нашел множество связанных вопросов, но они не совсем отвечают на мой вопрос.

ответ

0

Есть несколько хороших способов в этом так вопрос: Convert accented characters to their plain ascii equivalents

iconv может работать, хотя я думаю, что для вашего приложения верхний ответ может быть лучшим: он имеет связь с comments of strtr с массивом акценты должны быть заменены их эквивалентами ascii

+0

спасибо за ваш ответ. Как указано в деталях моего вопроса, я уже нашел несколько функций для преобразования символов с акцентом на английские символы. Тем не менее, проблема, с которой я столкнулась, заключалась в том, что я использовал две разные функции в своем скрипте, одну для преобразования текстовых полей в ссылки SEO, а другую - для замены символов. По какой-то причине я не мог заставить их работать вместе. – CHAVOUSA

0

Проведя еще несколько часов, играя с двумя сценариями, я придумал решение, которое сделало и то, и другое, конвертировало текстовое поле в ссылки SEO и изменило акцентированные символы.

Вопрос, который у меня был, был порядок функций. Сначала используя функцию для преобразования символов, функция SEO следует за правильной конверсией в ссылки SEO, используя все английские символы.

Код я использовал generate_seo_link(convertAccented($script)); и два Funtions были сохранены в отдельной связанной странице, как показано ниже:

/* REPLACE ACCENTED LETTERS */ 
function convertAccented($str) 
{ $accented = array("á", "é", "ó", "ú", "ñ","í"); 
    $cleanlink = array("a", "e", "o", "u", "n","i"); 
    return str_replace($accented, $cleanlink, $str); 
}  

*/GENERATE SEO URLS */  
function generate_seo_link($input,$replace = '-',$remove_words = true,$words_array = array()) 
{ 
//make it lowercase, remove punctuation, remove multiple/leading/ending spaces 
$return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($input)))); 

//remove words, if not helpful to seo 
//i like my defaults list in remove_words(), so I wont pass that array 
if($remove_words) { $return = remove_words($return,$replace,$words_array); } 

//convert the spaces to whatever the user wants 
//usually a dash or underscore.. 
//...then return the value. 
return str_replace(' ',$replace,$return); 
} 

/* takes an input, scrubs unnecessary words */ 
function remove_words($input,$replace,$words_array = array(),$unique_words = true) 
{ 
//separate all words based on spaces 
$input_array = explode(' ',$input); 

//create the return array 
$return = array(); 

//loops through words, remove bad words, keep good ones 
foreach($input_array as $word) 
{ 
    //if it's a word we should add... 
    if(!in_array($word,$words_array) && ($unique_words ? !in_array($word,$return) : true)) 
    { 
     $return[] = $word; 
    } 
} 

//return good words separated by dashes 
return implode($replace,$return); 
} 
Смежные вопросы