Кодирование только арабской части в Url Не все URL

У меня есть эта ссылка: http://www.example.com?p= عنوان مقال اخبار

Я хочу закодировать URL без ущерба для него, поэтому мне нужно urlencoding арабской части формы url => «عنوان مقال اخبار» НЕ все URL

Пример:

URL станет после кодирования

http://www.example.com?p=%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D9%85%D9%82%D8%A7%D9%84%20%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1

НЕ

http%3A%2F%2Fwww.example.com%3Fp%3D%D8%B9%D9%86%D9%88%D8%A7%D9%86%20%D9%85%D9%82%D8%A7%D9%84%20%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1

Подсказка: я получил эту ссылку из RSS, НЕ созданную с моей стороны.

Кроме того, я не хочу разделять URL-адрес и кодировать арабскую часть, а затем присоединиться к ней снова. я хочу общее решение для всех ожидаемых URL, таких как www.example.com/ عربي / 123
www.example.com/123/ عربي / عربي

-2

Решение

Попробуй это:

$url = 'http://www.example.com?p=عنوان مقال اخبار';

$foo = preg_replace_callback(
'/([\x{0600}-\x{06ff}]|[\x{0750}-\x{077f}]|[\x{fb50}-\x{fc3f}]|[\x{fe70}-\x{fefc}])+/Uui'
,(function($match) { return urlencode($match[1]); })
,$url
);

echo $foo;
1

Другие решения

Ответ @ deceze — самый правильный. Он предполагал, что ты …

  • Разбейте URL с помощью parse_url.
  • Разделить путь /,
  • Вызов urlencode на все.
  • Положите URL обратно вместе.

Это позволит вам создать правильный URL.

Однако, если вы не заботитесь о проверке, будет работать что-то вроде приведенного ниже:

function EncodeExistingURL($input) {

//From: https://en.wikipedia.org/wiki/Percent-encoding#Types_of_URI_characters
//The percent sign is included to leave existing encoded characters intact.
$valid  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~!*\'();:@&=+$,/?#[]%';
$length = strlen($input);
for ($i = 0; $i < $length; $i++) {
$character = $input[$i];
$output   .= (strpos($valid, $character) === FALSE ? rawurlencode($character) : $character);
}
return $output;

}
1

По вопросам рекламы [email protected]