我正在寻找一些安全的URL生成器很长一段时间,但找不到一个适用于匈牙利语的,所以我决定用strtr函数替换匈牙利语字符,但它不能正常工作。它不会取代任何只是“”到“ - ”。
function safeURL($str) {
$clean = strtr($str, array('Á'=>'a', 'É'=>'e', 'Í'=>'i', 'Ú'=>'u', 'Ü'=>'u', 'Ű'=>'u', 'Ó'=>'o', 'Ö'=>'o', 'Ő'=>'o', '.'=>'-', '!'=>'-', '.'=>'?'));
$clean = strtr($clean, array('á'=>'a', 'é'=>'e', 'í'=>'i', 'ú'=>'u', 'ü'=>'u', 'ű'=>'u', 'ó'=>'o', 'ö'=>'o', 'ő'=>'o', ' '=>'-', '/'=>'-', ':'=>'-'));
$clean = trim($clean, '-');
return $clean;
}
我需要列出所有大写字母和非大写字母,这看起来有点奇怪,但strtolower似乎也不适用于这些字符。我究竟做错了什么? (页面和数据库中的编码已正确设置为UTF-8)。
输出:
Üdvözöllek a weboldalamon! => Üdvözöllek-a-weboldalamon
Sziasztok üpegvőreúű => Sziasztok-üpegvőreúű
答案 0 :(得分:1)
试试:
$string = "IÁm DÍYÁR";
//These are the chars that are going to be replaced.. you can add other chars by yourself
$bad_chars = array('Á', 'É', 'Í', 'Ú', 'Ü', 'Ű', 'Ó');
//the bad chars are going to be replaced by those ones by order
$good_chars = array('A', 'E', 'I', 'U', 'U', 'U', 'O');
$safe_str = strtr($string, array_combine($bad_chars, $good_chars));
或在你的情况下这是一个功能:
function safeURL($str) {
$capital_bad_chars = array('Á', 'É', 'Í', 'Ú', 'Ü', 'Ű', 'Ó', 'Ö', 'Ő', '.', '!', '.');
$capital_good_chars = array('a', 'e', 'i', 'u', 'u', 'u', 'o', 'o', 'o', '-', '-', '?');
$small_bad_chars = array('á', 'é', 'í', 'ú', 'ü', 'ű', 'ó', 'ö', 'ő', ' ', '/', ':'));
$small_good_chars = array('a', 'e', 'i', 'u', 'u', 'u', 'o', 'o', 'o', '-', '-', '-');
$clean = strtr($str, array_combine($capital_bad_chars, $capital_good_chars));
$clean = strtr($str, array_combine($small_bad_chars, $small_good_chars));
$clean = trim($clean, '-');
return $clean;
}
对我有用!
答案 1 :(得分:0)
为什么不使用特殊扩展名。 Derick的Transliterate相当不错。看看 - 也许你可以使用它。 http://derickrethans.nl/projects.html在页面中间查看“Transliteration PHP Extension”,“Read more”下还有一个示例
答案 2 :(得分:0)
您需要使用多字节字符串函数来正确处理UTF-8字符。尝试使用str_replace和mb_strtolower功能。 根据PHP文档str_replace是二进制安全函数。这意味着它可以处理UTF-8编码的字符串而不会丢失任何数据。