Кодирование не имеет значения в этой ситуации, поскольку мы имеем дело только с символами ASCII, и они оба кодируют ASCII одинаково. Проблема в
Ваши данные различны в обоих случаях, обратите внимание на пробелы, предшествующие Directory
и ControlCase
в вашем первом примере, но не представлены во втором.
Вам необходимо избежать обратной косой черты в строке ruby или интерпретировать их как escape-символы
Как только вы решите эти две проблемы, вы получите тот же результат:
PS:
PS H:\> $String = " >> >> Directory: D:\OneDrive - >> ControlCase\jt-work\evidance-collection\evidances-text\PCI_Evidences_CCIN-CAS-VKAUS\evidences >> >> >> Mode LastWriteTime Length Name >> ---- ------------- ------ ---- >> -a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1 >> -a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt >> -a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt >> -a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt >> -a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt >> -a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt >> -a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt >> -a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt >> -a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt >> >> " PS H:\> Get-Hash($string) 6454c0ecf1700448fb2496037a1e9ce496b185cd
Ruby:
>> varj = " .. .. Directory: D:\\OneDrive - .. ControlCase\\jt-work\\evidance-collection\\evidances-text\\PCI_Evidences_CCIN-CAS-VKAUS\\evidences .. .. .. Mode LastWriteTime Length Name .. ---- ------------- ------ ---- .. -a--- 2019-01-16 1:14 PM 7073 21_to_calc_hash.ps1 .. -a--- 2019-01-16 1:15 PM 9973 CCIN-CAS-VKAUS_pci_evidence_Q21.txt .. -a--- 2019-01-15 9:37 PM 67399 CCIN-CAS-VKAUS_pci_evidence_Q23.txt .. -a--- 2019-01-15 9:37 PM 5055 CCIN-CAS-VKAUS_pci_evidence_Q34.txt .. -a--- 2019-01-15 9:38 PM 10820 CCIN-CAS-VKAUS_pci_evidence_Q45.txt .. -a--- 2019-01-15 9:38 PM 13129 CCIN-CAS-VKAUS_pci_evidence_Q50.txt .. -a--- 2019-01-15 9:38 PM 7163 CCIN-CAS-VKAUS_pci_evidence_Q67.txt .. -a--- 2019-01-15 9:39 PM 4301 CCIN-CAS-VKAUS_pci_evidence_Q69.txt .. -a--- 2019-01-15 9:39 PM 2900 CCIN-CAS-VKAUS_pci_evidence_Q81.txt .. .. " >> puts Digest::SHA1.hexdigest(varj.encode(Encoding::UTF_8)) => 6454c0ecf1700448fb2496037a1e9ce496b185cd >> puts Digest::SHA1.hexdigest(varj.encode(Encoding::ISO_8859_1)) => 6454c0ecf1700448fb2496037a1e9ce496b185cd
Редактировать:
Если вы все еще не можете Соответствие, я думаю, лучший подход - сравнить байтовые значения каждой строки, чтобы определить различия.
PS:
PS H:\> $enc = [system.Text.Encoding]::UTF8 PS H:\> $enc.GetBytes($String) 10 10 32 32 ...
Ruby:
>> varj_Encoded.bytes.to_a => [10, 10, 32, 32, ...
Я не верю, что это возможно, хотя в этом я могу ошибаться. Я хотел бы спросить, почему вы хотите это сделать. Вместо того, чтобы выполнять операции с классом вместо экземпляров, возможно, вам просто нужен один экземпляр для всего приложения? В этом случае вам, вероятно, следует использовать одноэлементный шаблон .
вам может потребоваться тщательно проверить параметры: возможно, есть некоторые различия здесь и там, но не так много, я бы сказал: и mysql, и mysqli основаны на одной и той же библиотеке (libmysql; по крайней мере для PHP < = 5.2)Например:
mysql_select_db
после подключения, чтобы указать, к какой базе данных вы хотите выполнять свои запросы mysqli_connect
. mysqli_select_db
, которую вы можете использовать, если хотите.
Как только вы закончите с этим, попробуйте запустить новую версию вашего скрипта ... И проверьте, все ли работает; если нет ... Пора искать ошибки; -)
Например:
mysql_select_db
после подключения, чтобы указать, к какой базе данных вы хотите выполнять запросы. mysqli_connect
. mysqli_select_db
, которую вы можете использовать, если хотите.
Как только вы закончите с этим, попробуйте выполнить новую версию вашего скрипта ... И проверьте, все ли работает; если нет ... Пора искать ошибки; -)
Например:
mysql_select_db
после подключения, чтобы указать, к какой базе данных вы хотите выполнять запросы. mysqli_connect
. mysqli_select_db
, которую вы можете использовать, если хотите.
Как только вы закончите с этим, попробуйте выполнить новую версию вашего скрипта ... И проверьте, все ли работает; если нет ... Пора искать ошибки; -)
mysqli_connect
. mysqli_select_db
функция, которую вы можете использовать, если хотите.
Как только вы закончите с этим, попробуйте выполнить новую версию вашего скрипта ... И проверьте, все ли работает; если нет ... Пора искать ошибки; -)
mysqli_connect
. mysqli_select_db
функция, которую вы можете использовать, если хотите.
Как только вы закончите с этим, попробуйте выполнить новую версию вашего скрипта ... И проверьте, все ли работает; если нет ... Пора искать ошибки; -)
Я только что создал функцию с теми же именами, чтобы преобразовать и перезаписать к новому php7:
$host = "your host";
$un = "username";
$pw = "password";
$db = "database";
$MYSQLI_CONNECT = mysqli_connect($host, $un, $pw, $db);
function mysql_query($q) {
global $MYSQLI_CONNECT;
return mysqli_query($MYSQLI_CONNECT,$q);
}
function mysql_fetch_assoc($q) {
return mysqli_fetch_assoc($q);
}
function mysql_fetch_array($q){
return mysqli_fetch_array($q , MYSQLI_BOTH);
}
function mysql_num_rows($q){
return mysqli_num_rows($q);
}
function mysql_insert_id() {
global $MYSQLI_CONNECT;
return mysqli_insert_id($MYSQLI_CONNECT);
}
function mysql_real_escape_string($q) {
global $MYSQLI_CONNECT;
return mysqli_real_escape_string($MYSQLI_CONNECT,$q);
}
Это работает на меня, я надеюсь, что это будет работать на Вас всех, если я ошибочный, исправите меня.
Хотя этой темой является старое десятилетие, я все еще часто требую к 'backpatch' существующим приложениям, которые положились mysql
, расширение — исходные программисты было слишком лениво, чтобы осуществить рефакторинг весь их код и просто сказать клиентам удостоверяться, что они выполняют последнюю доступную версию PHP 5.6.
PHP 5.6 теперь официально удерживается от использования; другими словами, у разработчиков было десятилетие, чтобы избавиться от их зависимостей от mysql
и переместиться в PDO
(или, ну, в общем, mysqli
...). Но... изменение такого большого количества унаследованного кода является дорогим, и не каждый менеджер готово заплатить в течение неисчислимых часов для 'исправления' проектов с десятками тысяч строк.
я искал много решений, и, в моем случае, я часто использовал решение, представленное @esty-shlomovitz —, но тем временем, я нашел что-то еще лучше:
https://www.phpclasses.org/package/9199-PHP-Replace-mysql-functions-using-the-mysqli-extension.html
(необходимо зарегистрироваться для загрузки его, но это просто занимает минуту)
Это всего два файла, которые действуют как общедоступные замены для целого mysql
расширение и очень умно эмулируют в значительной степени все (использование mysqli
) без потребности волноваться очень об этом. Конечно, это не идеальное решение, но очень вероятно это будет работать в 99% всех случаев там.
кроме того, хорошее учебное руководство для контакта с работой по дому миграции (перечисляющий многие распространенные ошибки при миграции) может также быть найдено здесь: https://www.phpclasses.org/blog/package/9199/post/3-Smoothly-Migrate-your-PHP-Code-using-the-Old-MySQL-extension-to-MySQLi.html
(при чтении этого в 2030 и веб-сайта PHPclasses, снижается, ну, в общем, можно всегда пробовать archive.org :-)
Я бы предварительно рекомендовал использовать PDO для доступа к SQL.
Тогда это только случай изменения драйвера и обеспечения работы SQL на новом сервере. Теоретически. Другой вопрос - миграция данных.
Доступ к абстрактной базе данных отличный.