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

Нежелательные знаки типа «<будет заменено правильно, но умлауты немецкие не переоборудованы. Понятия не имею почему.

У кого-то есть подсказка для меня?

Торстен

1

Решение

Как отмечали другие, наиболее вероятной причиной является несоответствие кодировки символов. Поскольку заголовки, которые вы пытаетесь преобразовать, по-видимому, в UTF-8, проблема, скорее всего, в том, что ваш исходный код PHP не. Попробуйте повторно сохранить файл как текст UTF-8 и посмотрите, решит ли это проблему.

Кстати, простой способ отладки этого состоит в том, чтобы распечатать как строки данных, так и массив транслитерации в один и тот же выходной файл, например, используя print_r() или же var_dump(), и посмотрите на вывод, чтобы убедиться, что не-ASCII-символы в нем выглядят правильно. Если символы выглядят правильно в данных, но неправильно в таблице транслитерации (или наоборот), это признак того, что кодировки не совпадают.

Ps. Если у вас есть PHP Iconv расширение установлено (и вы, вероятно, делаете), рассмотрим используя его для автоматического преобразования ваших титров в ASCII.

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

По вопросам рекламы [email protected]