2016-08-19 72 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嗎?

Torsten

+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 ......這是我的解決方案。它現在有效! – 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文本。 –