1

プロジェクトのサイトマップを生成するスクリプトを作成します。

このスクリプトは、strtr() を使用して不要な記号を置き換え、ドイツ語のウムラウトも変換します。

    $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;
}

「<」などの不要な記号は正しく置き換えられますが、ドイツ語のウムラウトは変換されません。理由がわかりません。

誰かが私にヒントを持っていますか?

トルステン

4

2 に答える 2

0

他の人が指摘したように、最も可能性の高い原因は文字エンコーディングの不一致です。変換しようとしているタイトルは明らかに UTF-8 であるため、問題は PHP ソース コードが UTF-8 ではない可能性が最も高いです。ファイルを UTF-8 テキストとして再保存して、問題が解決するかどうかを確認してください。

ところで、これをデバッグする簡単な方法は、データ行と文字変換配列の両方を同じ出力ファイルに出力するprint_r()ことvar_dump()です。データでは文字が正しく表示されていても、音訳表では正しく表示されない (またはその逆) 場合は、エンコーディングが一致していないことを示しています。

Ps。PHP のiconv拡張機能がインストールされている場合 (おそらくインストールされている場合)、それを使用してタイトルを ASCII に自動的に変換することを検討してください。

于 2016-08-19T18:57:51.090 に答える
0

文字セットを確認します。送信フォーム ページで次を使用している場合:

<meta charset="utf-8"> 

動作しないでしょう。

次のような別のエンコーディングを使用してみてください

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

置換配列をテストするための小さなサンプル コードを次に示します。

<!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>
于 2016-08-19T12:43:58.357 に答える