Вы не должны использовать ваши значения в качестве идентификаторов.Это не очень хорошая практика, и именно поэтому вы сталкиваетесь с этой проблемой.Но если вы все равно хотите это сделать ...
Если вы хотите использовать одну строку для всех языков, вам нужно создать одну строку, исключающую все ограниченные символы, найденные на каждом языке.Если ограниченные символы являются частью пути, становится все труднее сохранить уникальность.Я бы порекомендовал вам взять полный путь, а затем использовать preg_replace (), чтобы изменить все символы, которые не должны быть подчеркнуты.
$old = '../../disney/mouse/mickey.php';
$new = preg_replace('/[^a-z0-9]/i', '_', $old);
echo $new;
//Outputs: "______disney_mouse_mickey_php"
Вы определенно захотите изменить это, чтобы добавить больше разрешенных символов.Чем меньше вы ограничиваете, тем меньше вероятность того, что вы столкнетесь с неуникальными атрибутами id / name.
Если вам нужен метод, который менее подвержен наличию возможного неуникального id / name,затем вы можете обернуть ваш путь в md5 () (PHP), чтобы создать хеш md5.Это менее удобно для чтения, но должно быть достаточно уникальным для большинства некритических целей.
$old = '../../disney/mouse/mickey.php';
$new = md5($old);
echo $new;
//Outputs: "403d07916233847221263553573c5321"
В ответ на ваши комментарии, вот моя последняя попытка.Эта / custom / функция закодирует путь, который является уникальным и читаемым в источнике.Это также позволит вам декодировать в исходную строку пути.Разрешенные символы и escape-символы настраиваются так, что вы можете найти тот, который можно использовать на всех языках, которые вам нужны.
function customPathEncode($old)
{
$chars_allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$escape_char = '%';
$new = '';
$old_length = strlen($old);
for($i = 0; $i < $old_length; ++$i)
{
if(false === strpos($chars_allowed, $old[$i]))
{
$new .= $escape_char.bin2hex($old[$i]);
}
else
{
$new .= $old[$i];
}
}
return $new;
}
echo customPathEncode('../../disney/mouse/mickey.php');
//Output: "%2e%2e%2f%2e%2e%2fdisney%2fmouse%2fmickey%2ephp"