php - multidimensional - Juego de caracteres diferente en servidor diferente?
search array php key (2)
¿Qué conjunto de caracteres está escrito su archivo?
Como ha escrito los caracteres que desea reemplazar directamente en su código, como cadenas, están codificados en cualquier conjunto de caracteres que utilice el archivo. Si ese conjunto de caracteres difiere de lo que obtienes del navegador, tus funciones no funcionarán.
El punto importante que debe tener en cuenta es mantener siempre un registro del juego de caracteres codificado con sus cadenas y convertirlo cuando sea necesario.
Eche un vistazo a las preguntas frecuentes de Kore Nordmanns sobre los conjuntos de caracteres en PHP para obtener más consejos sobre los conjuntos de caracteres.
Acabo de probar localmente mi aplicación web, todo funciona bien, pero después de cargarla a la aplicación del servidor se comporta de manera diferente. Utilizo la función formatiraj_string_url para convertir símbolos diacríticos y obtener una URL limpia ... localmente funciona bien pero en el servidor esta función no los convierte de la misma manera.
Pocos días antes probé esto en un tercer servidor y funcionó bien. Ahora estoy cargando la web para probarla nuevamente en este tercer servidor, pero me pregunto qué podría ser realmente la causa de tal comportamiento.
function formatiraj_string_url($string)
{
$string = strtolower($string);
$znak[0] = '' '';
$znak[1] = ''Š'';
$znak[2] = ''š'';
$znak[3] = ''Đ'';
$znak[4] = ''đ'';
$znak[5] = ''Č'';
$znak[6] = ''č'';
$znak[7] = ''Ć'';
$znak[8] = ''ć'';
$znak[9] = ''Ž'';
$znak[10] = ''ž'';
$znak[11] = ''Š'';
$znak[12] = ''Đ'';
$znak[13] = ''Č'';
$znak[14] = ''Ć'';
$znak[15] = ''Ž'';
$znak[16] = ''š'';
$znak[17] = ''đ'';
$znak[18] = ''č'';
$znak[19] = ''ć'';
$znak[20] = ''ž'';
$znak[21] = ''Š''; // Š
$znak[22] = ''š''; // š
$zamjena[0] = ''-'';
$zamjena[1] = ''s'';
$zamjena[2] = ''s'';
$zamjena[3] = ''d'';
$zamjena[4] = ''d'';
$zamjena[5] = ''c'';
$zamjena[6] = ''c'';
$zamjena[7] = ''c'';
$zamjena[8] = ''c'';
$zamjena[9] = ''z'';
$zamjena[10] = ''z'';
$zamjena[11] = ''s'';
$zamjena[12] = ''d'';
$zamjena[13] = ''c'';
$zamjena[14] = ''c'';
$zamjena[15] = ''z'';
$zamjena[16] = ''s'';
$zamjena[17] = ''d'';
$zamjena[18] = ''c'';
$zamjena[19] = ''c'';
$zamjena[20] = ''z'';
$zamjena[21] = ''s'';
$zamjena[22] = ''s'';
$string = str_replace($znak, $zamjena, $string);
$new_string = preg_replace("/[^a-zA-Z0-9-s]/", "", $string);
return $new_string;
}
EDITAR: Antes de str_replace, esta función usa preg_replace. En el servidor, este fue el error mostrado:
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /home2/sinjcom/public_html/sinj.com.hr/administracija/include/funkcije.php on line 200
Pero a nivel local, no tuve este problema
Recomiendo que confíe en el código existente y altamente probado para hacer esto. Creo que todas estas funciones suponen UTF-8 de entrada y salida de 7 bits ASCII:
-
remove_accents()
de Wordpress - Módulo de transliteración de Drupal (requeriría un poco de trabajo para desatarlo de Drupal)
-
utf8_to_ascii()
del venerable proyecto PHP UTF8 -
friendly_url()
por Jakub Vrána -
Doctrine_Inflector::urlize()
-
slugify()
parece sólido