Я пытаюсь создать безопасную для URL версию строки.
Хотя обычно в URL-адресах используются только слагы ASCII, на самом деле возможноиметь веб-адреса, включая символы не ASCII.например ::
http://en.wikipedia.org/wiki/Medúlla
Это действительный IRI.Для включения в U RI, вы должны UTF-8 и% -кодировать его:
http://en.wikipedia.org/wiki/Med%C3%BAlla
В любом случае, большинство браузеров (кроме иногда не IE)) отобразит версию IRI в адресной строке.Такие сайты, как Википедия, используют это для получения красивых адресов.
функция преобразования не видит символ ú
Какая функция преобразования?rawurlencode()
будет правильно выплевывать %C3%BA
для ú
, если, как вы, вероятно, и делаете, у вас это в кодировке UTF-8.Это правильный способ включения текста в компонент пути URL.(urlencode()
также дает те же результаты, но его следует использовать только для компонентов запроса.)
Если вы имеете в виду htmlentities()
... do not , используйте эту функцию.Он преобразует все не-ASCII-символы в ссылки на символы HTML, что делает ваш вывод излишне большим и означает, что он должен знать, в какой кодировке находится передаваемая вами строка.Если вы не укажете аргумент UTF-8 $charset
, он будет использовать ISO-8859-1 и, следовательно, испортит все ваши символы, не относящиеся к ASCII.
Если вы специально не создаете среду, в которой неСимволы ASCII, лучше использовать htmlspecialchars()
.Это дает меньший вывод, и не имеет значения (*), если вы забудете включить аргумент $charset
, поскольку все, что он меняет, это пара символов, таких как <
и &
.
(На самом деле это может иметь значение для некоторых восточноазиатских многобайтовых наборов символов, где <
может быть частью многобайтовой последовательности и поэтому не должно быть экранировано. Но в целом вы бы хотели избежать этих устаревших кодировок, так как UTF-8 менее ужасен.)
(даже простой str_replace()
тоже не работает).
Если вы написали str_replace(..., 'ú', ...)
в исходном коде PHP, вам придетсяубедитесь, что вы сохранили исходный код в той же кодировке, что и при обработке, иначе он не будет совпадать.
К сожалению, большинство текстовых редакторов Windows по-прежнему сохраняют в (ошибочно названном) «ANSI ”кодовая страница, которая зависит от локали, а не просто с использованием UTF-8.Но должно быть возможно сохранить файл как UTF-8, и тогда замена должна работать.В качестве альтернативы, напишите '\xc3\xba'
, чтобы избежать проблемы.
Запустите SET NAMES utf8
в базе данных перед запросом
Используйте mysql_set_charset()
в предпочтении.