2016-08-19 6 views
1

私のプロジェクト用のサイトマップを生成するスクリプトを作成します。strtr()が部分的に動作しない

このスクリプトは、不要な記号を置き換えるために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; 
} 

不要な兆候が正しく置き換えられますが、ドイツ語のウムラウトは変換されません。なぜ私は考えていない。

誰かが私のためにtippを持っていますか?

トルステム

+1

おそらく原因は文字セットの不一致 –

答えて

0

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

ところで、これを簡単にデバッグするには、データ行と音訳配列の両方を同じ出力ファイルに印刷することがあります。 print_r()またはvar_dump()と入力し、出力を調べて、その中の非ASCII文字が正しいかどうかを確認します。文字がデータ内で正しく表示されているが、音訳テーブルで正しく表示されていない場合(またはその逆の場合)、エンコードが一致しないことを示す記号です。

ps。 PHP iconvの拡張機能がインストールされている場合は、using it to automatically convert your titles to ASCII.

+0

ありがとう、@ Ilmari-Karonen ...このtippは私の解決策でした。それは今働きます! – bee

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> 
+0

...または、おそらくスクリプトファイルをUTF-8テキストとして保存するだけです。 –

関連する問題