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

检查字符集。如果您的发送表单页面使用:

<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 回答
0

正如其他人所指出的,最可能的原因是字符编码不匹配。由于您尝试转换的标题显然是 UTF-8 格式,因此问题很可能是您的 PHP 源代码不是. 尝试将文件重新保存为 UTF-8 文本,看看是否能解决问题。

print_r()顺便说一句,一种简单的调试方法是使用例如or将数据行和音译数组打印到同一个输出文件中var_dump(),并查看输出以查看其中的非 ASCII 字符是否正确。如果字符在数据中看起来正确但在音译表中错误(反之亦然),这表明编码不匹配。

附言。如果您安装了 PHP iconv扩展(并且您可能已经安装了),请考虑使用它来自动将您的标题转换为 ASCII。

于 2016-08-19T18:57:51.090 回答