str_replace () в многобайтовых строках опасно?

Учитывая определенные наборы многобайтовых символов, правильно ли я предполагаю, что следующее не делает то, для чего оно было предназначено?

$string = str_replace('"', '\\"', $string);

В частности, если ввод был в набор символов, который может иметь допустимый символ, например 0xbf5c, поэтому злоумышленник может ввести 0xbf22, чтобы получить 0xbf5c22, Я также люблю Emacs и кое-что взломал с помощью Emacs Lisp. Есть одна вещь, которая мысленно мешает мне что-либо делать ...

Я уже выучил Clojure раньше, и мне очень нравится этот язык. Я также люблю Emacs и кое-что взломал с помощью Emacs Lisp. Но есть одна вещь, которая мысленно мешает мне сделать что-нибудь более существенное с Elisp. Это концепция динамической области видимости. Я просто его боюсь, потому что он мне настолько чужд и пахнет полуглобальными переменными.

Итак, с объявлениями переменных я не знаю, какие действия безопасны, а какие опасны. Насколько я понял, переменные, установленные с помощью setq, подпадают под динамическую область видимости (верно?) А как насчет переменных let? Где-то я читал, что let позволяет выполнять простую лексическую область видимости, но где-то еще я читал, что let vars также динамически ограничены.

Я думаю, что меня больше всего беспокоит то, что мой код (с использованием setq или let) случайно ломает некоторые переменные из кода платформы или стороннего кода, который я вызываю, или что после такого вызова мои локальные переменные случайно испортились. Как мне этого избежать?

Есть ли несколько простых практических правил, которым я могу просто следовать и точно знать, что происходит с осциллографом, не подвергаясь каким-то странным и трудным для отладки способам?

52
задан auramo 24 September 2010 в 00:32
поделиться