Construyo un script que debería generar un mapa del sitio para mi proyecto.

Este script usa strtr () para reemplazar signos no deseados y también convertir diéresis alemanas.

    $ers = array( '<' => '', '>' => '', ' ' => '-',  'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', '&' => 'und', '*' => '', ' - ' => '-', ',' => '', '.' => '', '!' => '', '?' => '' );
foreach ($rs_post as $row) { 
  $kategorie = $row['category'];
  $kategorie = strtr($kategorie,$ers);
  $kategorie = strtolower($kategorie);
  $kategorie = trim($kategorie);
  $org_file .= "<url><loc>https://domain.org/kategorie/" . $kategorie . "/</loc><lastmod>2016-08-18T19:02:42+00:00</lastmod><changefreq>monthly</changefreq><priority>0.2</priority></url>" . PHP_EOL;
}

Los signos no deseados como "<" se reemplazarán correctamente, pero las diéresis alemanas no se convertirán. No tengo ni idea de porqué.

¿Alguien tiene una propina para mí?

Torsten

1
bee 19 ago. 2016 a las 13:12

2 respuestas

La mejor respuesta

Como han señalado otros, la causa más probable es una falta de coincidencia en la codificación de caracteres. Dado que los títulos que está intentando convertir aparentemente están en UTF-8, lo más probable es que el problema sea que su código fuente PHP no lo sea . Intente volver a guardar el archivo como texto UTF-8 y vea si eso soluciona el problema.

Por cierto, una forma sencilla de depurar esto sería imprimir tanto sus filas de datos como su matriz de transliteración en el mismo archivo de salida usando, por ejemplo, print_r() o var_dump() y observe el resultado para ver si los caracteres que no son ASCII se ven correctos. Si los caracteres se ven bien en los datos pero mal en la tabla de transliteración (o viceversa), eso es una señal de que las codificaciones no coinciden.

PD. Si tiene instalada la extensión PHP iconv (y probablemente la tenga), considere usándolo para automáticamente convierte tus títulos a ASCII.

0
Community 23 may. 2017 a las 11:51

Compruebe el juego de caracteres. Si su página de formulario de envío utiliza:

<meta charset="utf-8"> 

No trabajará.

Intente usar otra codificación como

<meta charset="ISO-8859-1">

Aquí hay un pequeño código de muestra para probar su matriz de reemplazo:

<!DOCTYPE html>
<html>
<?php
if(isset($_POST["txt"])) 
{   
    echo '<head><meta charset="ISO-8859-1"></head><body>';

    $posted = $_POST["txt"]; 
    echo 'Received raw: ' . $posted .'<br/>';
    echo 'Received: ' . htmlspecialchars($posted).'<br/>';; 

    $ers = array( '<' => '', '>' => '', ' ' => '-',  'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', '&' => 'und', '*' => '', ' - ' => '-', ',' => '', '.' => '', '!' => '', '?' => '' );

    $replaced = strtr($posted,$ers);   
    echo 'Replaced: ' . $replaced .'<br/>';  
}
else {
    ?>  
<head>
    <!--<meta charset="utf-8">--> <!--THIS ENCODING WILL NOT WORK -->
     <meta charset="ISO-8859-1">  <!--THIS WORKS FINE -->
</head>
<body> 
  <p>the text you want to replace here</p>
  <form action="#" method="post">
  Text: <input type="text" name="txt" value="">
  <input type="submit" value="Submit">
</form>

<?php   
}
?>  
</body>
</html>
0
Grappachu 19 ago. 2016 a las 12:54